One thing to remember about Flash is that unlike traditional hard drives, there is much going on under the covers. To read and write a block on a hard drive, the head moves to the appropriate position on the drive and then reads or writes the block as it rotates under the head. With Flash, there is much going on under the covers such as erasing blocks, wear leveling, write amplification, disturbs and other phenomena particular to Flash.
For many applications, the best API is the one already in use which in most cases is the standard POSIX block interface. While that is not ideal for performance, it may be good enough. There are simple enhancements to that API which can bring about a world of difference to some applications. Vectored reads and writes which allow an application to read multiple disjoint blocks with a single system call can affect performance drastically. Also, atomic reads and writes can be invaluable for applications such as databases where data consistency is important.
Specialized applications might want more control over Flash. If the application reads and writes data in large chunks, it might want to ensure that the data is aligned on an erase block boundary to minimize or eliminate garbage collection inside the Flash drive. This is sometimes true for hyperscale applications.
Most applications deal with data in varying sizes and have to somehow manage that data using the block interface. This can be quite cumbersome. An interface that is particularly suited to both applications and Flash is the key/value interface.
GigaSpaces XAP introduces a specific blobstore plugin suited for ZetaScale’s interface that allows optimized access to the calls between RAM & SSD in a way that enables the application to perform the heavy lifting of complex queries in RAM and accesses the raw data thorough flash. By that the application achieves the optimal cost/performance ratio.
More on this see: http://docs.gigaspaces.com/xap100adm/blobstore-cache-policy.html