我希望能够在数据存储中运行一组记录/文档,但这些记录始终保持在RAM中。我只需要使用1.5 2GB到2 2GB的RAM (可能更少)。这将是基于服务器的,而不是嵌入式的。
我知道内存中的键值存储不适合我,因为我需要丰富的查询功能。
我知道MySQL可以做基于内存的表,但不确定人们是否会使用这个功能来满足我的想法。SQL Server能否将表固定在内存中?整张桌子?
我应该查看哪些其他数据存储?如果速度快,Map/Reduce样式查询也很好。
发布于 2012-02-10 01:11:05
对于关系数据库解决方案,SQLLite可以在内存中运行。对于非关系数据库,RavenDB可以在内存中运行。
发布于 2012-02-10 03:33:04
如果您可以将数据表示为一个对象集合,那么您就可以使用Linq作为您的“富查询”功能,并在内存中完成所有这些操作:这将比现有的几乎所有数据库解决方案都要快得多。如果您可以将所有数据都保存在内存中,那么甚至不必为数据库而烦恼。
注意:如果在.NET中执行此操作,则必须在64位模式下构建项目,因为在32位应用程序上,内存中的数据不能超过~1.5 GB。如果你不能在64位模式下构建/运行,那么你可能需要一个数据库。
更新
我不确定我是否理解了你所说的:我真的不确定什么是流行系统,这会让我相信我没有使用流行系统。我也不知道什么是“自主开发”的对象,或者什么是“自主开发”的.NET系统。我只使用标准的.NET 4.0,当我说对象时,我特意指的是你写的类可以保存你的数据。从那时起,你将数据加载到内存中(我不知道你是如何获得数据的:文件、数据库、网络等),然后Linq为你做ORM。线程安全只在访问对象的内部集合时才重要,您可以使用简单的锁来做到这一点。
哦,如果它是自主开发的.NET系统-这些对象是否托管在服务器上,并被多个客户端访问?
对于我正在处理的数据,我不需要任何类型的丰富查询功能(既不需要在内存中,也不需要从数据库中获取),这就是为什么我们要将任何无法放入内存的数据存储到嵌入式数据库(LevelDB)中。这样,我们所有的数据都包含在磁盘上,当我们需要它时,我们采用最短/最快的路径将其放入内存。通过网络只会减慢你的速度,所以你可以这样做,但只有在你绝对必须这样做的时候才这样做(即你有一个严格的约束,你的2 2GB数据在某个数据库中,而不是你的本地机器上)。
发布于 2012-02-10 04:49:36
VoltDB是一个内存中与ACID兼容的数据库,它针对高速OLTP进行了优化。它运行在64位Linux或Mac上,有一个开源社区版,以及几种语言的客户端库。
当您说“丰富的查询功能”时,听起来可能更像是一个联机分析处理用例,但如果查询是基本复杂的,那么它可能非常适合VoltDB。你能分享更多关于你的用例吗?
https://stackoverflow.com/questions/9214991
复制相似问题