【问题标题】:Cassandra Schema卡桑德拉模式
【发布时间】:2013-07-03 20:30:26
【问题描述】:

我目前在 Cassandra 中设计了一个模式,但我想知道是否有更好的方法来做事。基本上,问题在于大多数(如果不是全部)读取都是动态的。我已经构建了一个分段系统作为读取动态自定义查询的应用程序服务(与 Ca​​ssandra 完全无关,但查询是严格的并且仅限于应用程序),它会继续查询 cassandra 并合并结果。

我已将大多数列族设置为我认为合适的宽度,并且由于数据的写入非常密集,因此使用复合键来划分负载。

这基本上是在 Cassandra 之上实现特定于应用程序的查询层,包括进行某种连接或合并操作。

此布局或流程是否有任何限制?

【问题讨论】:

  • 我认为您必须更加具体。 “动态读取”是什么意思?为什么要分段然后合并?
  • @Raedwald 基本上,应用层公开了一个查询服务A。它的任务是充当数据分段。分段与 cassandra 完全无关(尽管数据存储在其中)。我们没有直接接触 Cassandra,而是公开了一层间接层以提供更强大的分段。例如,有人可以请求“查找所有来自加拿大且浏览器为 Firefox 且登录后在首页搜索 5 次的用户”的数据集。这就是我所说的数据分割。
  • 服务层负责执行这个分割。我试图产生非常大的行(按列)以允许快速读取,但考虑到一些数据是计数器而另一些是其他类型,数据需要自动拆分到两个列族。
  • 尽管查询既不清晰也不用英文供参考。只是一个例子

标签: java service cassandra cql3


【解决方案1】:

如果您尝试使用 Cassandra 作为后端来执行某种 OLAP,我认为您会遇到问题。我在设计 Cassandra 表时看到的建议是 start with the queries you expect to run,然后设计非规范化表以使您的查询快速。所以你需要知道查询是什么;听起来您的应用程序并非如此。也许 RDBMS 会更好?

【讨论】:

  • RDBMS 无法工作,因为数据库主要处理写入。我会说 90% 是写入,10% 是读取,并且写入的吞吐量相当高。 Cassandra 提供了非常好的写入性能并且没有单点故障,这是关键。
【解决方案2】:

一个选项是用于 cassandra 的 PlayOrm(实际上是一个非关系的对象 nosql 映射,因为它遵循许多 nosql 模式)。它确实有自己的 S-SQL 语言来连接分区。虽然它不会将你的十亿行表加入十亿行,但如果你的分区低于一百万行,它可以帮助你。

nosql 偶尔会根据上下文进行客户端连接,而 PlayOrm 可以做到这一点,因此当您确实需要在 nosql 中连接时,您不必做太多工作,尽管这种情况非常罕见.....很多次非规范化更好。

playorm 中的模式也不同于 hibernate,比如一对多,多的 FK 嵌入在行中,因为这就是你在 nosql 中的做法。

后来, 院长

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-19
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多