【问题标题】:Insert order and pagination with Cassandra使用 Cassandra 插入订单和分页
【发布时间】:2014-10-13 13:31:56
【问题描述】:

首先我要说的是,我对 Cassandra 不是很有经验,而且我有可能试图将它用于不正确的任务。

我有一段代码存储了我想访问的 URL

List<URL> urls = new ArrayList();

问题是我存储了 很多 的 URL 并且我的应用程序运行内存不足。事实上,不想将这个列表保存在内存中,因为它会增长到千兆字节。 Cassandra 似乎是最好的解决方案,因为它可以存储大于可用内存的数据集。

我创建了一个简单的表格

CREATE TABLE links (
    url text,
    PRIMARY KEY(url));

我试图获取下一个这样的 URL

选择 * 来自网址 在哪里令牌(网址)

? 是最近访问的 URL。

问题是,如果我在运行上述查询之前插入新的 URL,这些 URL 可能会插入到最近访问的站点的“下方”。我的应用程序会错过它们,并且永远不会访问这些页面。

我的问题是如何在一个不断增长的表格中进行分页(在它不断增长的同时)而不遗漏任何内容?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    url 在您的情况下是一个分区键,并定义了一个节点,行(分区)将存储在该节点上。它没有定义行(分区)的顺序。

    http://cassandra.apache.org/doc/cql3/CQL.html#createTablepartitionClustering

    【讨论】:

    • 我明白这一点。我的问题是如何以 FIFO 顺序从 Cassandra 中提取数据(这是可能的)。
    • 你不能按顺序检索分区键,所以你必须将你的 URL(或它们的访问时间)存储到同一个分区中,但你必须仔细选择你的分区键,以避免非常长分区。
    【解决方案2】:

    Cassandra 并不完全适合您的用例。您可能想查看日志系统。可以看看 Java Chronicle 看看它是否更合适。

    【讨论】:

      猜你喜欢
      • 2016-09-01
      • 2021-06-28
      • 1970-01-01
      • 2015-12-24
      • 2011-08-22
      • 2016-09-07
      • 2017-11-25
      • 2019-10-06
      • 1970-01-01
      相关资源
      最近更新 更多