由于我一直在使用传统的关系数据库很长一段时间,转向nosql,特别是Cassandra,是一个很大的变化。我设计我的应用程序,以便数据库中的所有内容在启动时加载到应用程序的内部缓存中,如果对数据库的表有任何更新,它的相应缓存也会更新。例如,如果我有一个表Student
,则在启动时,该表中的所有数据都会加载到StudentCache
中,当我想插入/更新/删除时,我将调用一个更新两者的服务他们在同一时间。我的设计目的是防止直接从数据库中选择。
在Cassandra中,我的想法是构建包含所有需要数据的表,以便加入是不必要的,我想知道我最喜欢的设计是否仍然有用,或者直接从数据库查询数据是否更有效(即从一个表中查询)必要时。
答案 0 :(得分:3)
根据您描述的用例,我会说您需要查询数据可以防止存储您不需要的数据,以及如果您的数据集是5Gb会怎样?你还要加载整个数据集吗?
也许考虑一个你不在启动时加载所有数据的设计,但是根据需要加载它然后存储它并在再次查询之前检查这个商店,就像缓存一样!
Cassandra是按比例缩放的,您的设计无法处理缩放,您将达到数据集过大的程度。基于此,你应该考虑权衡。大量的动态查询与将所有内容存储在客户端中。我会建议直接查询,但是当你执行查询时存储数据,不要丢弃它然后再次执行相同的查询!
答案 1 :(得分:1)
我建议直接查询数据,因为将所有数据保存到应用程序会使应用程序性能基于输入。现在,如果您知道数据量永远不会超过目标机器的内存,那么这可能是一件好事。
如果您确定此限制应该更改(更高!),您将面临一个问题。采用这种方法在搜索时会很快(假设你在开始时对结果进行排序),但几乎会破坏可维护性。
如果你选择这个,那么前一个最喜欢的'方法'仍然有用。