Последняя версия кассандры по-прежнему поддерживает отдельные строки с разными столбцами? - PullRequest
1 голос
/ 09 июля 2020

Я новичок в cassandra, я смотрел официальный документ. Я могу обнаружить, что концепция таблицы в cassandra очень похожа на СУБД.

https://cassandra.apache.org/doc/latest/cql/index.html научит меня создавать таблицу, вставлять таблицу и т. Д. c.

Но ниже от https://www.tutorialspoint.com/cassandra/cassandra_data_model.htm.

В отличие от реляционных таблиц, где схема семейства столбцов не фиксирована, Cassandra не заставляет отдельные строки иметь все столбцы. На следующем рисунке показан пример семейства столбцов Cassandra. enter image description here

My question I can not find this design in current cassandra, below is the screenshot I run some simple insert command. введите описание изображения здесь

Так как я вставляю только два столбца INSERT INTO emp (emp_id, emp_city) VALUES (5, 'ab c') , остальные будут обнулены, это очень похоже на обычные rdbms.

Итак, не могли бы вы мне сказать, как я могу реализовать «разные строки имеют разные столбцы» на первом рисунке? Большое спасибо.

1 Ответ

1 голос
/ 09 июля 2020

Cassandra не вставляет null, когда вы опускаете данные для указанного столбца c. null возвращается, когда вы читаете данные, а данные отсутствуют. Лучше всего проверить, как данные лежат на диске, используя sstabledump. Например, для моих данных:

cqlsh:test> select * from test.st1;

 id | c1   | s1 | v1
----+------+----+------
 10 | null | 10 | null
  1 |    1 |  2 |    1
  1 |    2 |  2 |    1
  2 |   10 |  3 | null

(4 rows)

для последней строки я вижу, что у меня нет фактических данных, потому что cells пусто:

  {
    "partition" : {
      "key" : [ "2" ],
      "position" : 97
    },
    "rows" : [
      {
        "type" : "static_block",
        "position" : 144,
        "cells" : [
          { "name" : "s1", "value" : 3, "tstamp" : "2019-04-12T14:33:47.198445Z" }
        ]
      },
      {
        "type" : "row",
        "position" : 144,
        "clustering" : [ 10 ],
        "liveness_info" : { "tstamp" : "2019-04-29T12:49:31.450239Z" },
        "cells" : [ ]
      }
    ]
  }

, но если я вставить null явно:

cqlsh:test> insert into test.st1(id, s1, c1, v1) values (3, 10, 3, null);

, тогда я увижу его в файле данных как надгробие внутри cells:

  {
    "partition" : {
      "key" : [ "3" ],
      "position" : 0
    },
    "rows" : [
      {
        "type" : "static_block",
        "position" : 39,
        "cells" : [
          { "name" : "s1", "value" : 10, "tstamp" : "2020-07-09T09:19:39.751467Z" }
        ]
      },
      {
        "type" : "row",
        "position" : 39,
        "clustering" : [ 3 ],
        "liveness_info" : { "tstamp" : "2020-07-09T09:19:39.751467Z" },
        "cells" : [
          { "name" : "v1", "deletion_info" : { "local_delete_time" : "2020-07-09T09:19:39Z" }
          }
        ]
      }
    ]
  }
...