Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Proposed Server API

Data Model

API (objId below refers to (table, key)):

  • get(objId) -> (val, version) | error
  • put(objId, val, version, [[ idxname, key ] ... ]) -> version | error
    • version either specifies the previous version read, to ensure update consistency, or INF to force
    • [ idxname, key ] pairs specify indexes to insert into in the associated table with associated keys
  • delete(objId, version) -> version | error
    • Remove the object, but only if version matches the current instance or is INF
  • lookup(tblpath, idxname, min, max) -> (val, version, primary_key?)
    • What types for indexes (i.e. are min & max one of string, int, float)?

Note that using versions we can create higher-level synchronization primitives, but do we want cmpxchg or something similar for performance reasons?

Do we want reads/writes to be full-update only? What about appending writes or writes to subranges?

What do we want keys to be?

  1. Fixed n-bit length, set by system?
  2. hash(crud), user-defined?
  3. Variable-length blobs (generalization of above)?

Indexing

API (objId below refers to (table, key)):

  • createIndex(table, idxname)
  • destroyIndex(table, idxname)
  • addIndexEntry(objId, idxname)
  • delIndexEntry(objId, idxname)
  • findEntries(table, idxname, min, max)

We probably want multiple flavours of indexes (hash tables, trees, etc).

  • No labels