是否存在使用某种Object Store的ActiveRecord的替代品?
我在想像Erlang的MNesia是理想的.
更新
我一直在调查CouchDB,我认为这是我要选择的选项.这是使用CouchRest和ActiveCouch之间的折腾.CouchRest非常成熟,并且在CouchDB peepcode插曲中使用,但它不是ActiveRecord的替代品,这有点不利.
我只想说CouchDB是非常惊人的.
更新(2009年11月10日)
CouchDB并没有真正为我工作.CouchDB并不真正支持任意查询(需要提前编写和编译查询).它还打破了非常大的数据集.
我一直在玩MongoDB,这真的很不可思议.具有查询和索引的无架构JSON数据存储.
我甚至开始为它建立一个名为Ming的管理工具.
我正在玩db4o,我有Visual Studio的对象管理器查看器.看起来没问题,但与HeidiSQL/SQL Studio等等工具不完全相同,更不用说它锁定了db4o文件 - 我不能同时使用我的db4o应用程序和对象管理器.
也许我错了,但无论如何,我想知道还有什么.您建议使用哪些工具来查看和操作db4o文件?
更新:我一直在使用LINQPad.有一些牦牛剃须涉及,但它的工作得很好.在HeidiSQL/SQL Studio等应用程序中可用的功能方面仍然有很多不足之处,但这是一个开始.
我正在寻找一个允许我在python"对象数据库"上运行类似SQL的查询的库.对于对象数据库,我指的是内存中相当复杂的python对象和列表结构.基本上这将是一个"反向ORM" - 它不是为关系数据库提供面向对象的接口,而是为对象数据库提供SQL-ish接口.
C#的LINQ非常接近.Python的列表推导非常好,但是在执行复杂的事情(排序,连接等)时语法会变得毛茸茸.此外,我不能(轻松)使用列表推导动态创建查询.
实际语法可以是基于字符串的,也可以使用面向对象的DSL(来自(mylist).select(...)).如果图书馆提供某种索引来加速搜索,奖励积分.
这是存在还是我必须发明它?
我正在为即将到来的项目评估两个对象数据库db4o(http://www.db4o.com)和Eloquera数据库(http://eloquera.com).我必须选择一个.我的基本要求是RAD的可扩展性,多用户支持和简单的类型演变.
请分享您的真实世界体验.
如果你有两者,你能比较这两个吗?你喜欢哪个?
我正在寻找一个Python的对象数据库(没有手工泡菜:D).
我有什么选择(除了明显的ZODB)?
我目前正在开发一个基于Android的项目.在没有了解许多细节的情况下,该软件将在定制的设备上运行.硬件永远不会改变,并且永远都是一样的.这是一个明确的加:)
话虽如此,该项目要求我们在设备上存储负载和数据负载 - 在某些表中超过3米的行.SQLite处理扫描这么多行对我们来说很好,当我们开始进行复杂的连接以带回我们需要的所有相关数据时,问题就出现了.我们已经考虑过对数据库进行非规范化,但是担心会将数据库推到可用的范围之外.
我们正在研究使用面向对象的数据库,比如db4o或NeoDatis.我们希望通过存储对象,我们可以在行级别上删除我们的关系并将它们存储在对象上(就像OOP一样).问题是我们无法找到在Android上运行和使用的这些ODB的任何性能相关基准(至少不是最近的基准).
有没有人对Android上的OODB和/或存储和访问这些大量数据有任何经验?如果是这样,您可以提供的任何建议将不胜感激.
- 编辑
这是我们面临的问题的一个例子.它与我们的应用程序无关(我的NDA说我不能发布任何具体内容),但这个例子很好地代表了这个问题.
想象一下,我们正在构建一个应用程序来监控在任何时候在新泽西收费公路上行驶的每辆车.对于任何给定的汽车,我们需要跟踪汽车制造和模型,汽车中有多少人以及汽车中人员的人口统计数据.所以基本上你最终得到的数据看起来像 -
id | 颜色| make_id | in_toll_lane | MODEL_ID
id | 名称
id | 名字| make_id
id | 年龄| 性别 is_driver | car_id
id | cars_in_line | ideal_cars_in_line | ideal_occupants
这些数据将经常变化.它也会变得相当庞大,因为毫无疑问很多人都会在任何时候驾驶NJ Pike.
根据这些数据,我们需要能够根据需要快速拍摄任何驾驶梭子鱼的人.我们还需要能够快速拍摄所有正在驾驶的男性或收费公路上的所有女性.我们还需要能够按年龄,性别,品牌,模型等进行搜索.
现在想象一下,我们需要弄清楚每辆车应该根据车内人数,理想的乘员数量,已经排队的车辆数量以及应该排队的理想车辆数来进入哪个收费车道.
这是一个非常简单的例子,虽然很能代表我们的问题.
- 结束编辑
提前致谢!
对于涉及大量CRUD的常规Web开发,使用对象数据库或关系数据库的缺点和优点是什么?
更新:我重新给予赏金奖励以给予内维尔.
我已经在面向对象的PHP中完成了大量的代码,但到目前为止,我的所有类都是"单数",我想你可以调用它.我正在改变几个类(有5个左右相同的方法)来扩展一个类(以摆脱重复的代码).我遇到了一些问题.
我试图访问父类中的方法,但您可以看到问题.
家长班:
class DatabaseObject {
public static function find_all() {
return self::find_by_sql("SELECT * FROM " . self::$table_name);
}
}
Run Code Online (Sandbox Code Playgroud)
儿童班:
class Topics extends DatabaseObject {
protected static $table_name = "master_cat";
protected static $db_fields = array('cat_id', 'category');
public $cat_id;
public $category;
}
Run Code Online (Sandbox Code Playgroud)
代码尝试从php/html文件访问此表中的所有信息:
$topics=Topics::find_all();
foreach($topics as $topic):
echo $topic->category;
endforeach;
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,大多数代码尚未合并到新的处理方式中.我需要更改self :: $ table_name,它不再以我正在做的新方式工作.我将有大约5个类扩展这个对象,所以最好的编码方式是什么,所以我可以用一个方法访问不同的表(而不是在5个不同的类中包含这个精确的find_all()方法.
我已经用PHP编程了好几年,并且过去采用了我自己的方法来处理我的应用程序中的数据.
我过去已经构建了自己的MVC,并且在php中对OOP有了合理的理解,但我知道我的实现需要一些认真的工作.
在过去,我使用了模型和数据库表之间的is-a关系.我现在知道,经过一些研究,这不是真正的最佳前进方式.据我了解,我应该创建并不真正关心底层数据库(或任何存储机制)的模型,而只关心它们的操作和数据.
从此我已经确定我可以创建模型,例如一个人,这个人对象可以有一些子(人类孩子)也是一个数组中的Person对象(使用addPerson和removePerson方法,接受一个Person对象) .
然后我可以创建一个PersonMapper,我可以使用它来获取具有特定"id"的Person,或者保存Person.
然后,这可以在查找表中查找关系数据,并为已请求的Person(如果有)创建关联的子对象,并同样将数据保存在save命令的查找表中.
这正在推动我的知识极限......
如果我想在这些级别内建造具有不同级别和不同房间的建筑物,该怎么办?如果我想在这些房间放置一些物品怎么办?
我会为建筑,水平,房间和项目创建一个课程
具有以下结构.
建筑物可以有一个或多个水平对象保持在一个数组级别可以有一个或多个房间对象保持在阵列室可以有1个或多个项目对象保持在一个数组
和更高级别映射器的每个类的映射器使用子映射器填充数组(根据顶级对象的请求或请求时的延迟加载)
这似乎紧紧地耦合了不同的物体,尽管是在一个方向上(即地板不需要在建筑物中,但建筑物可以有水平)
这是正确的做事方式吗?
在视图中我想要显示一个建筑物,可以选择一个水平,然后显示水平,选择一个房间等选项..但我可能还想显示一个像建筑物中的项目结构的树和什么他们所处的水平和空间.
我希望这是有道理的.当oop的一般概念似乎是分开的东西时,我正在努力与彼此嵌套对象的概念斗争.
如果有人可以提供帮助,那将非常有用.
php oop domain-driven-design domain-model object-oriented-database
我一直在阅读有关数据库模型的内容,但仍然不了解面向对象和对象关系模型之间的根本区别.
到目前为止,我了解到对象关系数据库是一个支持对象的关系数据库.是什么让面向对象数据库与众不同?(除了不支持关系模型).
面向对象的数据库是否也给出了对象方法 - 行为(如在OO编程语言中),而对象关系数据库只将它们视为具有属性和对其他对象的引用的结构?如果是这样,如何在OO数据库中使用这些对象方法?