具有低内存需求和Ruby接口的数据库
我需要一个低内存需求的数据库,用于一个内存很少的小型虚拟服务器。目前,我一直在使用SQLite和京都内阁或东京内阁。数据库应该有一个Ruby接口 理想情况下,我希望避免键值存储,因为我有“复杂”查询(比查找单个键更复杂)和元组作为键。另一方面,我不希望有一个固定的模式,避免SQL数据库的规划和迁移工作。数据库服务器也不是必需的,因为只有一个应用程序将使用该数据库具有低内存需求和Ruby接口的数据库,ruby,database,nosql,memory-management,key-value-store,Ruby,Database,Nosql,Memory Management,Key Value Store,我需要一个低内存需求的数据库,用于一个内存很少的小型虚拟服务器。目前,我一直在使用SQLite和京都内阁或东京内阁。数据库应该有一个Ruby接口 理想情况下,我希望避免键值存储,因为我有“复杂”查询(比查找单个键更复杂)和元组作为键。另一方面,我不希望有一个固定的模式,避免SQL数据库的规划和迁移工作。数据库服务器也不是必需的,因为只有一个应用程序将使用该数据库 你有什么建议和数字给我吗?你正在寻找一个只有数据库文件而没有运行服务器的解决方案。在这种情况下,Sqlite应该是一个不错的选择——如
你有什么建议和数字给我吗?你正在寻找一个只有数据库文件而没有运行服务器的解决方案。在这种情况下,Sqlite应该是一个不错的选择——如果您不需要它,只需关闭连接即可。Sqlite拥有您从和RDM所需要的一切(除了直接强制执行FK,但可以通过触发器实现),并且占用的内存非常少,因此在这种情况下,您可能更担心您的ORM(如果有的话)使用的内存 就我个人而言,我也将sqlite用于该用例,因为它是可移植的,易于访问和安装(这在服务器上应该不是问题,但在桌面应用程序中却是问题)。非常适合您尝试的操作。它被很多人用作他们的嵌入式应用程序数据库,因为它灵活、快速、经过良好测试且占地面积小。创建和清理表很容易,因此它可以很好地用于测试或单个应用程序使用的数据存储
它使用的SQL语言足够丰富,可以做正常的事情,但我建议使用它。这是一个很好的ORM,可以让您轻松地将其视为一个成熟的ORM,或者直接将原始SQL与DBM对话 BerkeleyDB和SQLite API是您所需要的。
- 非常低的内存需求李>
- 无模式李>
- 基于HTTP的接口。Ruby有很多HTTP客户机。HTTP缓存(如Varnish)也可以加快读取速度
- 创造性/复杂的查询。您可以在文档(记录)中的任何键上创建索引和查询。由于索引是非常可编程的,因此您可以对查询进行非常有创意的处理
- 设置查询/索引的学习曲线
- 您必须计划一种称为“压缩”的清理操作
- 与其他数据库相比,数据将占用更多空间李>
- 更多:
你能允许服务器消耗多少内存?我想少于10个MiB。但是如果数据库有令人信服的功能,我可以升级服务器。但是使用SQL,您会遇到架构和规划(绘制数据模型图,将其转换为正常形式等)开销的问题,并且可能会遇到架构迁移的问题。如果我找不到其他解决方案,SQLite将是我的选择,因为我知道它会起作用。我已经有一段时间没有使用ORMs了(最后是ActiveRecord)。我得到的印象是,它们只提供它们抽象的数据库的最低公分母,并生成次优查询。但由于SQLite只实现SQL 92,它不应该是一个巨大的限制。@ott“架构和规划(绘制数据模型图,将其转换为标准形式等)开销的问题,以及架构迁移的问题”为什么?如果您想这样做,它可能会很复杂,或者您可以为ActiveRecord或Sequel编写一些迁移,让它们来完成繁重的工作。将数据库适配器更改为MySQL、Postgres或其他类型,ORM仍将处理所有架构创建和操作。@至于SQL查询质量,我已经多次查看ActiveRecord和Sequel的输出,它们生成的查询大部分时间都是我编写的。你会惊讶于他们有多聪明。而且,如果你看到他们走错了路,你可以很容易地用自己手工修改过的SQL替代,他们会很高兴地使用它。他们肯定比使用DBI和手工编写更好。@Tin-Man:Sequel看起来很有希望,因为你有更好的控制能力,如果你想的话,实际的SQL数据库不会被抽象。如果我要使用SQL数据库,我可能会尝试Sequel.SQLite有点有限()。我真的很想能够写的意见。此外,缺少的DROP COLUMN支持对于迁移到我来说似乎有问题(您可以通过创建一个临时表、复制除要删除的列之外的数据、删除原始表并从临时表重新创建来进行迁移,但这真的很难看)。Berkeley DB在实践中比SQLite的默认存储引擎有哪些优势?@ott SQLite的默认存储引擎使用数据库级锁定,这意味着一次只能有一个写入程序访问数据库。BerkeleyDB使用页面级锁定和MVCC,因此它允许多个并发编写器。如果应用程序是并发写密集型的,那么应该使用BerkeleyDB存储引擎。如果应用程序不经常修改数据,SQLite的默认存储引擎和BerkeleyDB将执行相同的操作。