将数据存储为 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 编码映射。
我想到了将数据存储在列中的一些直接优势:
- 如果您确定突然需要通过另一个字段进行查询,可以在以后添加新索引。
- 您可以只更新特定字段而不更新整行。对于 blob,您需要读取和更新整个 blob。因此,在 blob 案例中可能会消除对不同字段的并发更新。
- 由于上述第 2 点,您可以在每次更新时写入更少的数据。
- 如果您不需要所有列
,则每个 select 可以读取较少的数据
- 上面的#3 和#4 可能会带来性能优势。
我有很多事件的行数据。这些事件共享一些共同的标识符,但也有事件独有的数据。
由于 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 编码映射。
我想到了将数据存储在列中的一些直接优势:
- 如果您确定突然需要通过另一个字段进行查询,可以在以后添加新索引。
- 您可以只更新特定字段而不更新整行。对于 blob,您需要读取和更新整个 blob。因此,在 blob 案例中可能会消除对不同字段的并发更新。
- 由于上述第 2 点,您可以在每次更新时写入更少的数据。
- 如果您不需要所有列 ,则每个 select 可以读取较少的数据
- 上面的#3 和#4 可能会带来性能优势。