如何为内存处理建模数据

时间:2015-06-16 20:35:12

标签: java performance architecture data-modeling

我有很多静态数据(即只读数据,这不是事务性的),只能在几天内更新一次。

我必须支持对该数据的搜索(api调用,而不是sql)。所以我想我只是将它加载到内存中,并偶尔刷新内存中的数据。 RAM应该不是问题,因为我们处于64位...数据可以在2 GB到50 GB的范围内。

我希望我能比查询数据库(索引表)更快地处理内存数据搜索。

我可以采用某种“方法”来设计这种内存数据吗?

更新

我的问题不是要使用什么RDBMS / noSQLDB。我想知道当我不再受存储机制约束时如何在内存中构造数据。

5 个答案:

答案 0 :(得分:0)

之前我使用过Redis(http://redis.io/),内存存储速度非常快。作为一种方法,为数据创建密钥有助于优化任何搜索和redis支持。

如果您还需要任何类型的数据处理,您可以查看Hadoop / HBase。

答案 1 :(得分:0)

多年前,我使用prevayler作为非数据库Web应用程序。它非常快!它使用POJO。易于理解和实施。

数据结构非常简单。将其视为具有默认节点的树。 Prevayler知道树的根,并将数据添加到此树中。您可以将树的快照作为备份机制。您甚至可以使用XML快照。

Prevayler是此类中的第一个。我相信还有其他库。在决定选择哪一项之前,先进行一些研究。

干杯。

答案 2 :(得分:0)

您是否正在尝试学习如何构建哈希表?

阅读Binary Search Trees,阅读一些关于算法设计的书籍。大概阅读The art of computer programming

或者使用您的特定语言使用的任何Hashtable实现。

很多人推荐数据库只是因为,除非你的模型适合简单的散列表模型,否则你最终需要一个数据库(做你自己的索引和加入算法是愚蠢的)。以下是In-Memory databases的列表,可帮助您选择路径。你选择的很多东西取决于你的平台,如果你想花钱。

答案 3 :(得分:0)

这主要取决于您的访问模式以及您希望如何处理数据。

例如,如果您想要快速搜索并对某些部分数据进行排序,则红黑树数据结构可能是一种很好的方法。 或者如果你想要简单的键值,你可以使用哈希表。

但是实现这些数据结构可能会非常棘手和困难,很多人以前已经多次解决过这个问题。

强烈建议在内存数据库中使用redis或其他解决方案。 只是干。

答案 4 :(得分:0)

这完全取决于您使用的数据类型以及您希望在其上执行的搜索类型。

例如,对于基于散列的结构,您不能支持部分单词搜索。

如果您的数据真的是关系型的(有很多列和关系),您可以使用内存中的关系数据库。您可以索引所有可搜索的列。但是如果你的数据只是一堆键值对或只是一堆段落,那么RDBMS是没用的。

在不了解您的要求的情况下,无法在此处建议特定的DS。

我建议您探索数据结构(如搜索树,尝试,哈希表),数据库(如redis),搜索引擎(如solr,lucene),以找出最适合您需求的数据结构。