Thank you Guido and Andreas. Regards, Kashyap On Tue, May 28, 2019 at 4:43 PM <andr...@itship.ch> wrote:
> Hi Kashyap > > > Is there documentation about the file format of the database file > > See file @doc64/structures within the picolisp directory. > There are the picolisp VM internals described, including Database file > format. > Like every database binary file format, it is based on fixed blocks > (block size). > External symbols (= database records) are stored using or multiple > blocks. > The data itself is encoded using PLIO format (PicoLisp I/O), referenced > to as "encoded binary format" in the (rd) and (pr) functions in > reference. > A small C-library (one .c and one .h file) providing PLIO to C/C++ > programs is available at https://software-lab.de/plio.tgz > > > > I am looking at the possibility of using it for the tripple store [1]. > > The wikipedia article contains this nice line "A graph database has a > more generalized structure than a triplestore". > The picolisp database is a graph database, though it contains > additional/more features than what is usually understood by the term. > > On lowest level, pilDB records are external symbols, which is nothing > else than the persistently saved picolisp symbol data type. > Unlike normal runtime picolisp symbols, external symbols have always a > fixed name (but arbitrary value and arbitrary properties). > The name of an external symbol is the block location (so the index in > the physical file) of the saved external symbol. > This way, every record in pilDB has always a global (per database > instance) unique identifier (GUID), which technically is the pointer to > the external symbols storage location. > Knowing the name of an external symbol is thus enough to load the record > from the physical file (seek to the specific location in the file and > read the PLIO-encoded data), no need to go via a primary key field as in > relational databases. > > Usually in practice a object-oriented schema is used, so database > records are objects (which in picolisp are based on the symbol data > type), which have properties and a property might directly point to > another object or be a list of other objects (graph-like, see +Link and > especially +Joint) with additional (relational-like optional) indexing > (and full ACID transaction mechanism as common in relational database). > The index structures are B-Trees (or special variant of it like UB-Tree) > which are automatically created and maintained according to the property > (in database context: relations) definitions in the entity relationship > definitions (= the database schema). These index trees are again stored > as external symbol structure. > > So you could either build a triple store using naked external symbols, > or do it the usual pilDB way by creating a (very small/simple) > entity/relation schema. > Maybe this old tutorial might be of help: > http://www.prodevtips.com/2008/04/23/simple-oodb-in-pico-lisp/ > > Kind regards > beneroth > > -- > UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe >