On Fri, Mar 29, 2013 at 8:17 PM, Jeff Archer < jsarc...@nanotronicsimaging.com> wrote:
> I could write directly to a file myself. But I would need to provide some > minimal indexing, some amount of housekeeping to manage variable > sized BLOBS and some minimal synchronization so that multiple instances of > the same application could operate simultaneously on a single set of data. > Have you looked at HDF5? Aside from synchronization, HDF5 gives you the indexing and book-keeping. It was designed for large "structured" binary data. By structured I mean storing n-D arrays of "structs", that can be "chunked" or "tilled" and compressed as desired, transparently, and accessed in whole or parts (hyperslabs) as desired, optimizing the access for you. An HDF5 file is basically like a file-system, with folders, and the "files" are "datasets", and HDF5 knows what's inside each dataset (say a 3D array of {x,y,z} doubles in a Point struct). It's structured data for binary scientific data. You can associate "attributes" (key, value pairs, the value's type, primitive or aggregate, known to HDF5 like for datasets) to datasets, which are in B-trees, and the whole thing is "paged" with a B-tree of pages and a page cache, similar to sqlite3. HDF5 is fast. I've often wished for the ability to "type" my sqlite blobs similar to how everything is typed in HDF5. You can in fact stuff HDF5 inside a blob, since HDF5 as a VFL (again just like sqlite3. the parallels are many), but you can't do much with that in-blob data using sqlite SQL, and since custom functions can only return scalars, there's little point. Might as well store the HDF5 files on disk next to the sqlite db file. But I guess I'm digressing here :) We've used a mix of SQLite3 and HDF5, which worked well for us, but we didn't have to worry about concurrent access though. --DD _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users