【问题标题】:Using application's internal cache while working with Cassandra使用 Cassandra 时使用应用程序的内部缓存
【发布时间】:2013-07-07 20:04:20
【问题描述】:

由于我长期使用传统的关系数据库,因此迁移到 nosql,尤其是 Cassandra,是一个很大的变化。我通常设计我的应用程序,以便在启动时将数据库中的所有内容加载到应用程序的内部缓存中,如果数据库表有任何更新,其相应的缓存也会更新。例如,如果我有一个表Student,在启动时,该表中的所有数据都会加载到StudentCache,当我想插入/更新/删除时,我会调用一个服务来更新它们同时。我的设计目的是防止直接从数据库中选择。

在 Cassandra 中,由于想法是构建包含所有需要的数据的表,这样连接就变得不必要了,我想知道我最喜欢的设计是否仍然有用,或者直接从数据库(即从一个表中)查询数据是否更有效) 需要时。

【问题讨论】:

  • 附带说明,在应用程序中保存数据库是一个非常糟糕的主意,因为您的应用程序的性能将基于输入。
  • 是的,它实际上使启动时间更长,但是,这是我在开发应用程序时必须做出的权衡,这需要大量查找。我相信将它们存储在地图中会更快。

标签: database nosql cassandra


【解决方案1】:

根据您描述的用例,我会说根据需要查询数据可以防止存储您不需要的数据,如果您的数据集是 5Gb,该怎么办?你还要加载整个数据集吗?

也许考虑一种设计,您不会在启动时加载所有数据,而是根据需要加载它,然后存储它并在再次查询之前检查此存储,就像缓存所做的那样

Cassandra 是为扩展而构建的,您的设计无法处理扩展,您将达到数据集太大的地步。基于此,您应该考虑权衡。大量即时查询与将所有内容存储在客户端中。我建议直接查询,但是在执行查询时存储数据,不要丢弃它然后再次执行相同的查询!

【讨论】:

    【解决方案2】:

    我建议直接查询数据,因为将所有数据保存到应用程序会使应用程序的性能基于输入。现在,如果您知道数据量永远不会超过目标机器的内存,这可能是一件好事。

    如果您决定更改此限制(更高!),您将面临问题。当涉及到搜索时,采用这种方法会很快(假设您在开始时对结果进行排序),但几乎会破坏可维护性。

    但是,如果您为此选择,以前最喜欢的“方法”仍然有用。

    【讨论】:

      猜你喜欢
      • 2017-08-17
      • 1970-01-01
      • 2019-11-13
      • 2014-04-04
      • 2018-12-21
      • 2015-01-02
      • 2013-10-16
      • 2023-04-06
      • 2011-11-29
      相关资源
      最近更新 更多