如何为内存处理建模数据
How to model data for in-memory processing
我有很多静态数据(即只读数据,非事务性数据)几天内只更新一次。
我必须支持对该数据的搜索(api 调用,而不是 sql)。所以我想我会把它加载到内存中,并偶尔刷新内存中的数据。 RAM 应该不是问题,因为我们使用的是 64 位...数据可以在 2 GB 到 50 GB 的范围内。
我希望我可以比查询数据库(以及索引表)更快地处理内存中数据的搜索。
是否有某种"approach"我可以用来设计这个内存数据?
更新:
我的问题不是关于使用什么 RDBMS/noSQLDB。当我不再受存储机制的约束时,我想知道如何在内存中构造数据。
我以前用过 Redis ( http://redis.io/ ),它的内存存储速度非常快。作为一种方法,为您的数据创建键有助于优化任何搜索,而 Redis 支持这一点。
如果你还需要任何类型的数据处理,你可以看看 Hadoop / HBase。
几年前,我曾将 prevayler 用于非数据库 Web 应用程序。速度快得令人难以置信!它使用 POJO。易于理解和实施。
数据结构非常简单。将其视为具有默认节点的树。 Prevayler 知道树的根并且您将数据添加到这棵树。您可以拍摄树的快照作为备份机制。您甚至可以使用 XML 个快照。
Prevayler 是最早的此类人之一。我确定还有其他图书馆。在决定使用哪一个之前,请先进行一些研究。
干杯。
您是否正在尝试学习如何构建哈希表?
继续阅读 Binary Search Trees, read a few books on algorithm design.. Probably read The art of computer programming。
或者使用您的特定语言使用的任何 Hashtable 实现。
很多人推荐数据库的原因很简单,除非您的模型适合简单的哈希表模型,否则您最终将需要一个数据库(做自己的索引和连接算法是愚蠢的)。这是 In-Memory databases 的列表,可能会帮助您选择路径。很多选择取决于你的平台,以及你是否想花钱。
这主要取决于您的访问模式以及您希望如何处理数据。
例如,如果您想要快速搜索并对部分数据进行排序,红黑树数据结构可能是一个很好的方法。
或者如果你想要简单的键值,你可以使用散列 table.
但是实现这些数据结构可能会很棘手和困难,许多人以前已经多次解决过这个问题。
强烈建议使用像 redis 或其他内存数据库这样的解决方案。
干脆干。
这完全取决于您使用的数据类型以及要对其执行的搜索类型。
例如,对于基于散列的结构,您不能支持部分单词搜索。
如果您的数据确实是相关的(有很多列和关系),您可以选择内存中的关系数据库。您可以索引所有可搜索的列。但是RDBMS是没有用的,如果你的数据只是一堆键值对或者只是一堆段落。
在不了解您的要求的情况下,无法在此处建议特定的 DS。
我建议您探索数据结构(如搜索树、尝试、哈希表)、数据库(如 Redis)、搜索引擎(如 solr、lucene)以找出最适合你的需求。
我有很多静态数据(即只读数据,非事务性数据)几天内只更新一次。
我必须支持对该数据的搜索(api 调用,而不是 sql)。所以我想我会把它加载到内存中,并偶尔刷新内存中的数据。 RAM 应该不是问题,因为我们使用的是 64 位...数据可以在 2 GB 到 50 GB 的范围内。
我希望我可以比查询数据库(以及索引表)更快地处理内存中数据的搜索。
是否有某种"approach"我可以用来设计这个内存数据?
更新:
我的问题不是关于使用什么 RDBMS/noSQLDB。当我不再受存储机制的约束时,我想知道如何在内存中构造数据。
我以前用过 Redis ( http://redis.io/ ),它的内存存储速度非常快。作为一种方法,为您的数据创建键有助于优化任何搜索,而 Redis 支持这一点。
如果你还需要任何类型的数据处理,你可以看看 Hadoop / HBase。
几年前,我曾将 prevayler 用于非数据库 Web 应用程序。速度快得令人难以置信!它使用 POJO。易于理解和实施。
数据结构非常简单。将其视为具有默认节点的树。 Prevayler 知道树的根并且您将数据添加到这棵树。您可以拍摄树的快照作为备份机制。您甚至可以使用 XML 个快照。
Prevayler 是最早的此类人之一。我确定还有其他图书馆。在决定使用哪一个之前,请先进行一些研究。
干杯。
您是否正在尝试学习如何构建哈希表?
继续阅读 Binary Search Trees, read a few books on algorithm design.. Probably read The art of computer programming。
或者使用您的特定语言使用的任何 Hashtable 实现。
很多人推荐数据库的原因很简单,除非您的模型适合简单的哈希表模型,否则您最终将需要一个数据库(做自己的索引和连接算法是愚蠢的)。这是 In-Memory databases 的列表,可能会帮助您选择路径。很多选择取决于你的平台,以及你是否想花钱。
这主要取决于您的访问模式以及您希望如何处理数据。
例如,如果您想要快速搜索并对部分数据进行排序,红黑树数据结构可能是一个很好的方法。 或者如果你想要简单的键值,你可以使用散列 table.
但是实现这些数据结构可能会很棘手和困难,许多人以前已经多次解决过这个问题。
强烈建议使用像 redis 或其他内存数据库这样的解决方案。 干脆干。
这完全取决于您使用的数据类型以及要对其执行的搜索类型。
例如,对于基于散列的结构,您不能支持部分单词搜索。
如果您的数据确实是相关的(有很多列和关系),您可以选择内存中的关系数据库。您可以索引所有可搜索的列。但是RDBMS是没有用的,如果你的数据只是一堆键值对或者只是一堆段落。
在不了解您的要求的情况下,无法在此处建议特定的 DS。
我建议您探索数据结构(如搜索树、尝试、哈希表)、数据库(如 Redis)、搜索引擎(如 solr、lucene)以找出最适合你的需求。