当前位置: 首页 > 知识库问答 >
问题:

将数据存储为 blob 与卡桑德拉中的列

公西飞鸾
2023-03-14

我有很多事件的行数据。这些事件共享一些公共标识符,但也具有事件所特有的数据。

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

例子

表有一个按事件类型分区的键(事件类型,时间戳)

event_type click可能有< code > ts:12345 page _ uri:" ABC 1234 " user _ id:" 1235567 " click _ location:" 1234,564 " event _ type < code > keyboard _ input 可能有< code > ts:1245 page _ uri:" ABC 345 " words _ enter:" foobar "

将其存储为包含行的表有什么好处吗?

event_type,ts,page_uri,user_id,click_location,words_entered

vs一张桌子

事件类型,ts,blob

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

共有1个答案

彭鸿文
2023-03-14

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

  1. 如果您确定突然需要通过另一个字段进行查询,则可以在以后添加新索引。
  2. 您只能更新特定字段而不更新整行。对于 Blob,需要读取和更新整个 blob。因此,在 Blob 情况下,对不同字段的并发更新可能会被清除。
  3. 由于上面的#2,您可以在每次更新时写入更少的数据。
  4. 如果您不需要所有列,则可以在每次选择时读取较少的数据
  5. 上面的 #3 和 #4 可能会带来性能优势。
 类似资料:
  • 我用Spring Data Cassandra 2.2.1开发了一个新的应用程序,想在Cassandra 2.1.9服务器上运行它(旧的,我知道)。但是我们得到了错误 Spring数据卡桑德拉手册声称Spring数据2.2.1至少需要卡桑德拉2.1,所以这应该有效,但它没有。我们包含的唯一特定于卡桑德拉的依赖项是 我怎样才能让这个工作?

  • 我使用的是spring数据cassandra,需要使用jpa映射一个字段,在cassandra中,该字段的类型为

  • 我正在创建一个用于审计我的web应用程序的应用程序。所以我想在CASSANDRA db中存储所有审计日志,数据不是预定义的,我们要存储到db中的内容,基本上应该存储到一个无模式的db中。那么我们如何将它存储到卡珊德拉。请帮帮我。

  • 卡桑德拉如何在内部存储空值?它是否占用任何存储空间?我正在编写一个应用程序,该应用程序使用具有许多列(100s)的表来表示不同类型的数据,因此列具有诸如“text1”,“text2”,“number1”,“number2”等名称,然后有一个外部JSON架构映射哪个列表示特定数据类型的什么值。因此,对于某种数据类型,许多列可能具有空值,并且我无法找到有关空值将占用的存储空间(如果有)的任何具体信息。

  • 我目前在cassandra中有一个名为macrecord的表,类似于以下内容: 在这种情况下,我想不出其他解决方案,只有在macadd值重复的情况下删除整行,然后插入具有更新时间戳的新行。 是否有更好的解决方案在macadd值重复时更新时间戳,或者在我的原始表中只有macadd是主键的范围内查询时间戳值的替代方法。

  • 我正在尝试使用Cassandra 2.1升级到Spring Data Cassandra 1.5. x的Spring Boot 1.5,但出现启动错误: 未能实例化[org.springframework.data.cassandra.mapping.CassandraMappingContext]:工厂方法“cassandraMapping”引发异常;嵌套异常为java.lang.NoClass