【问题标题】:Modelling Cassandra Data Struncture for both real-time and search from all?对 Cassandra 数据结构进行建模以进行实时和搜索?
【发布时间】:2020-05-30 21:30:04
【问题描述】:

我的项目同时提供实时数据和过去的数据。它像提要一样工作,因此它通过套接字显示实时数据,并通过 REST api 显示过去的数据(如果向下滚动)。为了有效地获取实时数据,我将日期设置为分区键,将时间设置为集群键。对于实时服务,我觉得这个数据结构建模很好。但我还必须获得有限数量的最近数据(如分页),如果需要,它们应该能够显示整个数据。为了通过 REST api 调用提供最近的 0~20 / 20~40 / 40~60 等数据,我的数据服务服务器必须记住它之前显示的内容以连续加载接下来的 20 个数据,作为书签。如果是 SQL,我会使用 ID 或 page&offset 的东西,但我不能用 Cassandra 做到这一点。所以我尝试了:

SELECT * FROM examples WHERE date<='DATEMARK' AND create_at < 'TIMEMARK' AND entities CONTAINS 'something' limit 20 ALLOW FILTERING;

但是由于日期是分区键,我不能使用比较操作>,

我可以使用 Cassandra 满足我的实时+过去的要求吗?我想知道我是否必须创建另一个数据库来访问过去的数据。

【问题讨论】:

    标签: database cassandra nosql real-time


    【解决方案1】:

    是的,你可以,但是你必须改变你的心态,像 NoSQL 模式一样思考,在这种情况下你可以以重复的方式保存你的数据,并将你的数据保存在另一个表中,并使用另一个满足你需要的分区键和集群列。

    【讨论】:

      【解决方案2】:

      我们一直在广泛使用 Cassandra 来显示实时和过去的数据。我要求您不要在 Cassandra 中使用 允许过滤 选项,因为这不是一个好习惯。尝试正确地制作您的架构,以便您不需要跳过列。假设您有一个架构:

      创建日期 |创建时间 |用户 ID |国家 |姓名 |活动

      在此架构中,您正在考虑将 Created_date,created_time,user_id, country 作为主键,但您需要特定国家/地区的 user_id。在这种情况下,即使您将 Country 列视为主键,您也不能像这样查询:

      "SELECT * from table where Created_date='2020-02-14' and Country ='india' 允许过滤";

      如果您的查询采用这种模式,您将丢失结果集中的数据,并且在处理大数据时会出错。或者您将使用不建议的允许过滤选项。因此,您需要更改架构的结构。

      创建日期 |国家 |城市 |创建时间 |用户 ID |姓名 |活动

      "SELECT * from table where created_date='2020-02-14' and country='india'"; 使用这种结构会给你一个非常一致的结果,你永远不会遇到任何错误。假设您想获取过去 7 天的所有数据。在这种情况下,使用循环并遍历每天的结果并将其存储到某个数据结构中。希望你能理解。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-20
        • 1970-01-01
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2016-03-17
        相关资源
        最近更新 更多