如何一起使用Cassandra和Ignite建模数据?

时间:2019-03-28 06:32:45

标签: cassandra nosql ignite key-value-store

我正在研究如何对同时具有Cassandra和Ignite的数据进行建模。到目前为止,Cassandra中数据建模的基本建议(来自this article)很明确:“围绕查询建模数据”。作者举了一个“用户查找”的例子。我们想通过用户名或电子邮件来查找用户,根据他的说法,最好的方法是有两个表:

CREATE TABLE users_by_username (
    username text PRIMARY KEY,
    email text,
    age int
)

CREATE TABLE users_by_email (
    email text PRIMARY KEY,
    username text,
    age int
)

但是,事情变得与Cassandra顶部的Ignite混淆了。不幸的是,我找不到任何有用的示例或以下问题的答案:

  1. 拥有多个存储用户信息的表是否意味着每个表都有Ignite缓存?
  2. 具有复合主键是否意味着为每个键引入新类型并将其用作Ignite缓存键?
  3. 具有Ignite意味着不直接从Cassandra中读取内容。它甚至使遵循NoSql最佳实践的建模数据场景成为现实吗?仅拥有一个用户表并让Ignite通过用户名或电子邮件处理查询是否可以。
CREATE TABLE users (
    id uuid PRIMARY KEY,
    username text,
    email text,
    age int
)

1 个答案:

答案 0 :(得分:1)

  1. 每个Cassandra表可能应该有一个缓存。

  2. 如果您的原始密钥是复合密钥,那么Ignite密钥也应该是复合密钥。

  3. 您将需要在Ignite中使用二级索引来按多个字段进行查询,这意味着您将必须在Ignite中保存所有数据(这对于纯缓存方案而言不是必需的)。这意味着启用readThroughwriteThrough,执行loadCache,并始终通过Ignite进行所有更新。您将不得不在“将点燃作为Cassandra的缓存”(遵循Cassandra的数据布局,可以保存部分数据)和“点燃作为由Cassandra支持的数据库”之间进行选择(您可以对Ignite的二级索引使用最佳布局)。