(PB or Powder byte is short for 30 bits (one FILT pixel))
There are mainly two best memory types you could use:
FILT Memory
Mass Photon Storage
The FILT memory type is great for dynamic reading/writing of data. It can access data in the same time independent of the location. There are different subtypes of this memory type:
1 Dimensional Read Only/Read & Write
2 Dimensional Read Only/Read & Write
Single Chamber FRAM
I don't quite understand how the Single Chamber FRAM memory works so i can't really say much about it. (The only saves in which this memory is used are subframe. Example: id:2051745)
Both the 1 and 2 Dimensional FILT memory (1FM/2FM) work by reading data from FILT pixels with LDTC. They could also be modified to write data with DRAY. They get the address of the FILT that should be read/written to and immediatly go there. The 1FM saves the data in a FILT array. It's great for saving small amounts of data (used here: id:3140990). The 2FM saves data in multiple FILT arrays placed above each other, therefore making the memory more complex but saving more data (example: id:3086499). Each FILT pixel adds 3.75 bytes to the memory. The main problem of FILT memories is that they take much space, but the amount of data they can save is usually enough without using a lot of space.
For more advanced memories:
The Mass Photon Storage (MPS) is saving data by giving it to a photon and stacking them over each other. You can stack an endless amount of photons (until you reach the particle limit), therefore saving a huge amount of data (max. around 800KB) in only one pixel. The most popular save using this technique is id:2201761. This saving method can be modified into different subtypes too. The usual MPS can't save data during runtime but you can modify it to write data too by using PCLN and DCEL (like I did in id:3141117). The only big problem of the MPS is that you can only write the data on top of the other data and read only the upper photon. This makes it ideal for linear reading (just by the order of the data) but not for dynamic reading.
To solve this problem, I have developed the Dual Photon Storage (I have seen a similar memory but can't find it anymore). Currently, there is no published DPS I know. The idea of the DPS is that it doesn't just delete the upper photon to access the next one, like the MPS, but copies it to the second photon stack (hence the name), what makes the data not only reusable, but dynamically accessable, because you don't have to always read the photon you're copying to the second stack, but just "scroll" trough the data. The problem of the DPS is that for each "scroll" it needs 8 frames (with usual electronics), so when the data is far from the pointer (the upper photon), the DPS needs a lot of time to scroll there while reading nothing. Also, the game mechanics can mess up the order of the photon what could make them unreadable. But I'm working on that.
In conclusion, the MPS type is great for saving linear data like text, images (e.g. in the printer by kit237. id:3053086) in a very small space.
The FILT memory type is good for dynamically reading or saving data fast.
Both could be upgraded so they can read/write 1 PB in one frame (with subframe), but the ones using usual electronics are 8 frames per PB.
The DPS is not reliable yet and under construction.