We have a storage var declared like this:
#[pallet::storage]
pub(super) type SomeMap<T: Config> = StorageMap<_, Blake2_128Concat, DataId, Vec<MyData<T>>, ValueQuery>;
and we have concerns that adding/removing values into Vec will cause copying the whole vector and thus doubling space occupied by the storage item from block to block. Is this really true? If so then (again by assumption) switching to StorageDoubleMap like this
#[pallet::storage]
pub(super) type SomeMap<T: Config> = StorageDoubleMap<_, Blake2_128Concat, DataId, Blake2_128Concat, AnotherId, MyData<T>, ValueQuery>;
should fix the problem? In general what are pros and cons in the 1st and 2nd implementations in terms of efficiency?