Skip to content
This repository was archived by the owner on Sep 12, 2018. It is now read-only.
This repository was archived by the owner on Sep 12, 2018. It is now read-only.

Rust backlog #133

@rnewman

Description

@rnewman

We're starting on a Rust rewrite of the existing Clojure codebase, using the rust branch.

With an eye to parallelism, the following will get us to parity and a bit further, at which point we'll start on the list of more speculative work.

Large portions of this will be easier than the first time around: the ClojureScript implementation required lots of deep thinking that won't need to be repeated.

Starter Projects:

Moving on:

  • Core (the big blocker for much of the rest):
    • Core valueType work: type codes and translation, value conversion.
    • Core schema work. Basic Rust type definitions. Traits for translations.
    • SQLite wrapper: opener, part reading, etc.
    • Bootstrapper.
    • Conn + DB.
  • Querying:
    • [@rnewman] Datalog query parser: port from DataScript. Parse simple find expressions #160.
    • Parsed query (FindRel) -> abstract query (ConjoiningClauses). Porting datomish.query.
      • This will involve building up much of 'Core', above, brick by brick.
    • Abstract query -> SQL.
    • Abstract query -> projectors.
    • Querying history and logs.
  • Transactor:
    • Transactor expansion: schema + shorthand -> datoms.
    • Transactor writer.
    • Transactor loop.
    • Prepared statements/statement caching.
    • Excision.
    • noHistory.
  • Schema management module (porting).
  • Reader pool (query executor).
    • Query interruption via closing connection.
    • Parallel reads.
    • Connection affinity to exploit sqlite page cache.
    • Prepared statements for repeated queries.
      • Invalidation when schema contents change.
      • Handling of query transformation in the presence of bound values, which might change between uses of the prepared statement.
  • Tooling. We can invest in this as much as we want; it's leverage.
    • A command-line query tool, just like sqlite3.
    • A REPL that's capable of doing programmatic read/write tasks. JS bindings? Rust REPL?
    • A developer tool/embedded server: showing query translations and plans, timing query execution, exploring schema…
    • GraphQL interface generation from Datomish schema.
    • Bulk loading and import. Make this independent by expanding into a datom stream wrt a given schema.
    • Export: textual/EDN, RDF?
  • Transaction listeners over a socket.
    • Log dumper standalone tool. Watch writes happening as they occur.
  • Syncing:
    • Transaction log replication (out) and replay (in).
      • Code and algorithms exist.
      • Define how IDs are mapped in and out, and how those might be efficiently represented in chunks.
      • Handle application of noHistory attributes.
      • Handle remote excision.
    • Multi-master transaction log handling (syncing).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions