My IFP store design is a copy of the 3store design, but using 32bit ids instead of hashes in the triples table. This enables a single resource to have multiple URIs, which makes IFP smushing much simpler.

ifpstore currently uses 3 tables:

triples table: - subject 32bit int - predicate 32bit int - object 32bit int - graph 32bit int - literal boolean - inferred boolean indexed on: (subject,predicate,object), (predicate), (object), (graph)

hashes table: - hash 64 bit md5 hash - id 32 bit int indexed on hash

literals table: -id 32 bit int -literal text indexed on id

The hashes table uses the same technique as Steve Harris' 3store - first 64 bits of an md5 hash. The query engine pre-hashes URIs and literals used in the query, and the sql call uses this table to convert hashes to integer ids to be used in the triples table.

The literals table enables conversion of id back to uri or literal text. This table generates sequential ids via auto_increment (which is the main reason for lumping URIs and literals in the same table).