AmorphousDB, ironically, doesn't have blobs, per se. It has an "opaque" type, but the decision as whether a particular large object is stored as part of the record or as a separate database object.

The Rdbs, Interbase, and Firebird have supported a numerical blob type to support automatic blob type conversions via blob filters. It works, but other than for translating system blobs to ascii for display, it hasn't seen much use and hasn't been picked up by other systems. For Netfrastructure, I give it up in favor of the more standard Blob and Clob types. This wasn't completely successful, either, as to index MS Word of PDF documents, Netfrastructure had to probe file headers, etc., to determine the document types.

In Amorphous, I went two steps further. First, the opaque type provides for an optional "out of band" mime type to describe the format of the document. And, following the traditional programmer mindset of "zero, one, infinitely", I added provision for an arbitrary number of user defined attributes. I have no idea of how they will eventually be used, but my guess is they will be useful for tracking a document's provenience -- who created it, when, and what was the phase of the moon.

The API for handling opaques for both input and out is by instances of the interface below, which was motivated by first, eliminating any need to make intermediary copies, and second, to obviate any need to materialize the blob as a continuous object.

   class Opaque
   {
   public:
        virtual ~Opaque()
            {};

        virtual void                    addRef() = 0;
        virtual void                    release() = 0;

        virtual size_t                   getLength() = 0;
        virtual const uint8_t*   getSegmentAddress(void*& handle,
   size_t& length) = 0;
        virtual int                        getAttributeCount() = 0;
        virtual const char*        getAttributeName(int index) = 0;
        virtual const char*        getAttributeValue(const char
   *attribute) = 0;
   };

I'm not suggesting that Firebird necessary go down this path, but it might be worth thinking about.

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://makebettercode.com/inteldaal-eval
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to