Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有低内存需求和Ruby接口的数据库_Ruby_Database_Nosql_Memory Management_Key Value Store - Fatal编程技术网

具有低内存需求和Ruby接口的数据库

具有低内存需求和Ruby接口的数据库,ruby,database,nosql,memory-management,key-value-store,Ruby,Database,Nosql,Memory Management,Key Value Store,我需要一个低内存需求的数据库,用于一个内存很少的小型虚拟服务器。目前,我一直在使用SQLite和京都内阁或东京内阁。数据库应该有一个Ruby接口 理想情况下,我希望避免键值存储,因为我有“复杂”查询(比查找单个键更复杂)和元组作为键。另一方面,我不希望有一个固定的模式,避免SQL数据库的规划和迁移工作。数据库服务器也不是必需的,因为只有一个应用程序将使用该数据库 你有什么建议和数字给我吗?你正在寻找一个只有数据库文件而没有运行服务器的解决方案。在这种情况下,Sqlite应该是一个不错的选择——如

我需要一个低内存需求的数据库,用于一个内存很少的小型虚拟服务器。目前,我一直在使用SQLite和京都内阁或东京内阁。数据库应该有一个Ruby接口

理想情况下,我希望避免键值存储,因为我有“复杂”查询(比查找单个键更复杂)和元组作为键。另一方面,我不希望有一个固定的模式,避免SQL数据库的规划和迁移工作。数据库服务器也不是必需的,因为只有一个应用程序将使用该数据库


你有什么建议和数字给我吗?

你正在寻找一个只有数据库文件而没有运行服务器的解决方案。在这种情况下,Sqlite应该是一个不错的选择——如果您不需要它,只需关闭连接即可。Sqlite拥有您从和RDM所需要的一切(除了直接强制执行FK,但可以通过触发器实现),并且占用的内存非常少,因此在这种情况下,您可能更担心您的ORM(如果有的话)使用的内存

就我个人而言,我也将sqlite用于该用例,因为它是可移植的,易于访问和安装(这在服务器上应该不是问题,但在桌面应用程序中却是问题)。

非常适合您尝试的操作。它被很多人用作他们的嵌入式应用程序数据库,因为它灵活、快速、经过良好测试且占地面积小。创建和清理表很容易,因此它可以很好地用于测试或单个应用程序使用的数据存储


它使用的SQL语言足够丰富,可以做正常的事情,但我建议使用它。这是一个很好的ORM,可以让您轻松地将其视为一个成熟的ORM,或者直接将原始SQL与DBM对话

BerkeleyDB和SQLite API是您所需要的。

  • 有(Postgresql 9.2+json)。没有我想的那么难/混乱。查询具有很大的灵活性,同时还可以获得无模式存储的好处。PG 9.2包括plv8js,这是一种新的语言处理程序,允许您使用JavaScript创建函数。下面是一个如何在第9.2页中索引和查询JSON文档的示例:

  • CouchDB(使用BigCoach。基于CouchDB,但更少的bug/问题):

    • 非常低的内存需求
    • 无模式
    • 基于HTTP的接口。Ruby有很多HTTP客户机。HTTP缓存(如Varnish)也可以加快读取速度
    • 创造性/复杂的查询。您可以在文档(记录)中的任何键上创建索引和查询。由于索引是非常可编程的,因此您可以对查询进行非常有创意的处理
    缺点:

    • 设置查询/索引的学习曲线
    • 您必须计划一种称为“压缩”的清理操作
    • 与其他数据库相比,数据将占用更多空间
    • 更多:
    如果磁盘价格便宜,内存价格昂贵,那么它将是满足您需求的理想选择

    “…CouchDB的另一个优势是,它已被证明能够满足数千个并发请求,只需要大约10MB的RAM——这有多棒?!”(发件人:)


  • 你能允许服务器消耗多少内存?我想少于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将执行相同的操作。