具有无限实例的ruby内存中对象数据库

时间:2013-12-11 07:01:10

标签: ruby sequel in-memory-database

我正在尝试在内存中获得一种可以支持任意数量的实例/连接的对象数据库。让我们从库示例开始:

假设我有一个Library课程。我可以根据需要创建这个类的多个实例 Library的每个实例都有Library::Book个对象的集合(可以library.books访问)。这个书籍集合特定于该库实例 我也有Library::Magazine行为相同。
有了这个,我可以做library.books['Nineteen Eighty Four'].authorlibrary.magazines.each {...}library.magazines.delete(magazine)等事情。

现在到目前为止并不难。任何数据库模型库都可以处理它。但是我希望能够克隆“库”。这意味着我可以使用Library的实例,然后执行library.clone,并获得一个与原点完全相同的全新库。但新副本将拥有自己的BooksMagazines集合(由原点创建)。
这意味着它应该创建一个重复的数据库,并且可以同时访问这两个数据库。

这是任意数量的同时访问的数据库似乎非常困难。理想情况下,我希望它是一个具有外键约束的关系数据库(因此我可以执行类似library.categories['fiction'].books.each {...}的操作,并在书中引用其所在类别的外键)。

我已经使用Sequel进行了一段时间的攻击,它接近于它允许多个sqlite内存数据库。但是它很难让它支持任意数量的它们(它需要一个表示每个数据库中每个表的常量类)。

1 个答案:

答案 0 :(得分:0)

假设所有数据库都具有相同的模式,您可以使用Sequel的分片支持(http://sequel.jeremyevans.net/rdoc/files/doc/sharding_rdoc.html)和每个表的单个模型类(而不是每个数据库的每个表的模型类)。您可以使用Database#add_servers和Database#remove_servers在运行时调整可用的分片。