我有很多静态数据(即只读数据,这不是事务性的),只能在几天内更新一次。
我必须支持对该数据的搜索(api调用,而不是sql)。所以我想我只是将它加载到内存中,并偶尔刷新内存中的数据。 RAM应该不是问题,因为我们处于64位...数据可以在2 GB到50 GB的范围内。
我希望我能比查询数据库(索引表)更快地处理内存数据搜索。
我可以采用某种“方法”来设计这种内存数据吗?
更新
我的问题不是要使用什么RDBMS / noSQLDB。我想知道当我不再受存储机制约束时如何在内存中构造数据。
答案 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),以找出最适合您需求的数据结构。