Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-13476 RocksDB based storage engine
  3. CASSANDRA-13553

Map C* table schema to RocksDB key value data model

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Open
    • Normal
    • Resolution: Unresolved
    • None
    • Legacy/Core
    • None

    Description

      The goal for this ticket is to find a way to map Cassandra's table data model to RocksDB's key value data model.

      To support most common C* queries on top of RocksDB, we plan to use this strategy, for each row in Cassandra:
      1. Encode Cassandra partition key + clustering keys into RocksDB key.
      2. Encode rest of Cassandra columns into RocksDB value.

      With this approach, there are two major problems we need to solve:
      1. After we encode C* keys into RocksDB key, we need to preserve the same sorting order in RocksDB byte comparator, as in original data type.
      2. Support timestamp, ttl, and tombestone on the values.

      To solve problem 1, we need to carefully design the encoding algorithm for each data type. Fortunately, there are some existing libraries we can play with, such as orderly (https://github.com/ndimiduk/orderly), which is used by HBase. Or flatbuffer (https://github.com/google/flatbuffers)

      To solve problem 2, our plan is to encode C* timestamp, ttl, and tombestone together with the values, and then use RocksDB's merge operator/compaction filter to merge different version of data, and handle ttl/tombestones.

      Attachments

        Activity

          People

            dikanggu Dikang Gu
            dikanggu Dikang Gu
            Dikang Gu
            Votes:
            0 Vote for this issue
            Watchers:
            9 Start watching this issue

            Dates

              Created:
              Updated: