将数据存储为 blob 与 cassandra 中的列

Storing data as a blob vs columns in cassandra

我有很多事件的行数据。这些事件共享一些共同的标识符,但也有事件独有的数据。

由于 Cassandra 不允许在未索引的字段上使用 where 子句,为每个键创建一行是否有任何优势,或者仅将 json 数据存储在 blob 中是否更容易?

示例

table 在(event_type,时间戳)上有一个键,由 event_type

分区

event_type click 可能有 ts:12345 page_uri: "ABC1234" user_id: "1235567" click_location: "1234,564" event_type keyboard_input 可能有 ts:1245 page_uri: "ABC345" words_entered: "foobar"

将其存储为 table 行有什么好处:

event_type, ts, page_uri, user_id, click_location, words_entered

对比 table

event_type, ts, blob

其中 blob 是其余数据的 json 编码映射。

我想到了将数据存储在列中的一些直接优势:

  1. 如果您确定突然需要通过另一个字段进行查询,可以在以后添加新索引。
  2. 您可以只更新特定字段而不更新整行。对于 blob,您需要读取和更新整个 blob。因此,在 blob 案例中可能会消除对不同字段的并发更新。
  3. 由于上述第 2 点,您可以在每次更新时写入更少的数据。
  4. 如果您不需要所有列
  5. ,则每个 select 可以读取较少的数据
  6. 上面的#3 和#4 可能会带来性能优势。