【问题标题】:Issue with NoSql data modelNoSql 数据模型的问题
【发布时间】:2015-09-19 05:47:59
【问题描述】:

作为新手,面对 Cassandra 数据模型的数据建模问题。我们计划将 Cassandra 用于报告目的。在报告中,我们需要通过多个参数过滤数据。假设我们有一个列族

Create table cf_data
(
   Date varchar,
   Attribute1 varchar, 
   Attribute2 varchar,
   Attribute3 varchar,
   Attribute4 varchar,
   Attribute5 varchar,
   Attribute6 varchar,
   Primary Key(Date)
)

我们需要支持像这样的查询

Select * from cf_date where date = '2015-02-02' and Attribute1 in ('asdf','assf','asdf') and Attribute1 in ('wewer','werwe') and Attribute2 in ('sdfsd','werwe') and Attribute3 in ('weryewu','ghjghjh') 

我知道我们在查询列族时需要遵守主键限制。 Cassandra 内部存储的工作原理类似于

SortedMap<String,SortedMap<Key,Value>>

NoSQL 的工作原理是按照访问模式存储非规范化数据。如果我需要满足上述查询,我​​应该如何对列族进行建模。在报表 UI 中,用户可以从 Attribute1、Attribute2、Attribute3.... 等下拉列表中选择值。一种选择是在 Cassandra 节点上使用 Spark 来支持 SQL 查询,但它比 Cassandra 期望的列族模型更好。

任何指针??

【问题讨论】:

  • 您存储的数据的性质是什么?
  • 这是金融时间序列数据。证券交易所交易信息被保存,所以我们可以说它是时间序列数据。大多数计算是根据历史数据和当前数据执行的。所有的计算都不能提前进行。一些计算是根据用户的输入实时执行的。
  • 我可以提供一些插入示例,以便我可以向您推荐新结构

标签: apache-spark cassandra nosql


【解决方案1】:

来自 Datastax CQL 文档:

“在大多数情况下,不建议在 WHERE 子句中使用 IN。使用 IN 会降低性能,因为通常必须查询很多节点。”

如果您需要使用 Spark 来支持 SQL 查询,最好使用适当的 SQL 数据库。仅仅因为 NoSQL 是一种时尚,你不需要跟随它。并非所有数据都可以在所有 NoSQL 数据库中高效建模。

另一个低效的选择是在没有属性本身的情况下进行查询并在应用程序中对过滤进行编码,这可能会产生很大的响应延迟。如果报告不是实时或接近实时创建的,那么你应该很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-06
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多