基于图形的数据库(http://neo4j.org/)和面向对象的数据库(http://www.db4o.com/)之间有什么区别?
database db4o neo4j graph-databases object-oriented-database
我目前正在尝试db4o(java版本),我非常喜欢我所看到的.但我不禁想知道它在真实的(网络)环境中的表现如何.有没有人有任何关于运行db4o的经验(好的或坏的)?
在Java反射世界中 -
我们如何确定Field对象是否具有transient修饰符?
http://docs.oracle.com/javase/tutorial/reflect/member/fieldModifiers.html
文档没有帮助.
我正在使用DB4o并试图避免从数据库中请求从未存储过的实例或类变量.
我正在尝试db4o对象数据库,到目前为止我非常喜欢我所看到的,但我也读过这篇关于stackoverflow db4o体验的帖子?表明并非一切看起来如此简单都很容易.
现在,我对如何在现实世界的应用程序中使用db4o有一些疑问.因此,如果您有使用db4o工作的经验(特别是在Web应用程序上下文中),我很乐意听到它们.
这是我的问题:
在使用db4o存储对象时,如何管理对象标识?**
来自RDBMS背景,您通常每个表都有一个主键/标识列,我现在无法想象如何在db4o中管理对象标识.
例如,如果我正在使用NHibernate/mysql并且需要通过id查找User对象,我会执行session.Load(primaryKey)并且它将被其PK检索.在表定义中将PK定义为自动增量也是很常见的.
由于db4o中没有这样的选项,我的想法是使用Guid结构来识别对象数据库中的一些对象.
有哪些工具可以在db中查看存储的对象?
在db4o世界中是否存在类似SQL Server Management Studio(可能不太复杂)的东西?我想查看db文件中已存储的数据/对象.
重命名域对象时,你搞砸了吗?
据我所知,当您重命名一个类时,无法再检索数据库中以前存储的任何实例.有办法解决这个问题吗?如何处理已包含许多对象的实时数据库的更新?
我可以将属性排除在保存到数据库之外吗?
例如,如果一个域对象持有对(无状态)服务对象的引用,那么如果域对象被持久化,服务对象也将被持久化,对吧?
在数据库中保存服务实例似乎有点奇怪,至少对我而言.
你可以排除服务实例被保存吗?如果再次检索域对象,我如何确保该服务也再次注入实例?
有没有办法完全禁用Java安全管理器?
我正在试验db4o的源代码.它使用反射来持久化对象,并且安全管理器似乎不允许反射来读写私有或受保护的字段.
我的代码:
public static void main(String[] args) throws IOException {
System.out.println("start");
new File( DB_FILE_NAME ).delete();
ObjectContainer container = Db4o.openFile( DB_FILE_NAME );
String ob = new String( "test" );
container.store( ob );
ObjectSet result = container.queryByExample( String.class );
System.out.println( "retrieved (" + result.size() + "):" );
while( result.hasNext() ) {
System.out.println( result.next() );
}
container.close();
System.out.println("finish");
}
Run Code Online (Sandbox Code Playgroud)
输出:
start [db4o 7.4.68.12069 2009-04-18 00:21:30] AccessibleObject#setAccessible() is not available. Private fields can not be stored. retrieved (0): finish
这个帖子建议修改java.policy文件以允许反射但它似乎对我不起作用.
我正在使用参数启动JVM,
-Djava.security.manager …
像MongoDB和db4o这样的对象数据库最近得到了很多宣传.与他们一起玩耍的每个人似乎都喜欢它.我猜他们在他们的示例应用程序中处理大约640K的数据.
有没有人试图使用具有大量数据(比如50GB或更多)的对象数据库?你是否仍然可以对它执行复杂的查询(比如从搜索屏幕)?它与您通常选择的关系数据库相比如何?
我只是好奇.我想把对象数据库暴跌,但我需要知道它是否可以在一个不仅仅是一个示例应用程序的东西上工作.
我认为现在是时候看看OO数据库,并决定将db4o用于我的下一个小项目 - 一个小型库.
请考虑以下对象:Book,Category.
一本书可以是0-n类别,一个类别可以应用于0-m书籍.
我的第一个想法是有一个连接对象,如BookCatecory,但经过一些谷歌搜索,我发现这不适合'真正的OO'.
因此,另一种方法(许多人推荐)是在两个对象中都有一个列表:Book.categories和Category.books.一方处理关系:Book.addCategory将类别添加到Book.categories并将Book添加到Category.books.如何在一个方法调用中更改2个对象时处理提交和回滚?
你的想法是什么?第二种方法有明显的优势,但至少对我来说,第一种"感觉"正确(更好的规范).
我正在玩db4o,我有Visual Studio的对象管理器查看器.看起来没问题,但与HeidiSQL/SQL Studio等等工具不完全相同,更不用说它锁定了db4o文件 - 我不能同时使用我的db4o应用程序和对象管理器.
也许我错了,但无论如何,我想知道还有什么.您建议使用哪些工具来查看和操作db4o文件?
更新:我一直在使用LINQPad.有一些牦牛剃须涉及,但它的工作得很好.在HeidiSQL/SQL Studio等应用程序中可用的功能方面仍然有很多不足之处,但这是一个开始.
我目前正在研究如何在我的Web应用程序中使用db4o存储.我很高兴db4o的工作原理.因此,当我阅读Code First方法时,我有点喜欢的是,因为使用EF4 Code First的方式与使用db4o非常相似:创建域对象(POCO),将它们抛到db4o,永不回头.
但是当我进行性能比较时,EF 4的速度非常慢.我无法弄清楚原因.
我使用以下实体:
public class Recipe
{
private List _RecipePreparations;
public int ID { get; set; }
public String Name { get; set; }
public String Description { get; set; }
public List Tags { get; set; }
public ICollection Preparations
{ get { return _RecipePreparations.AsReadOnly(); } }
public void AddPreparation(RecipePreparation preparation)
{
this._RecipePreparations.Add(preparation);
}
}
Run Code Online (Sandbox Code Playgroud)
public class RecipePreparation {public String Name {get; 组; } public String Description {get; 组; } public int Rating {get; 组; …
Run Code Online (Sandbox Code Playgroud) 我正在努力想出一个在OO模型中添加双向关系的好方法.假设有一个客户可以下多个订单,也就是说客户和订单类之间存在一对多关联,需要在两个方向上遍历:对于特定客户,应该可以告诉所有订单他们已下订单,对于订单,应该可以告诉客户.
这是一段Java代码,虽然这个问题主要与语言无关:
class Customer {
private Set orders = new HashSet<Order> ();
public void placeOrder (Order o) {
orders.add(o);
o.setCustomer(this);
}
}
class Order {
private Customer customer;
public void setCustomer (Customer c) {
customer = c;
}
}
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,鉴于模特有人可以轻易打电话:
o.setCustomer(c);
Run Code Online (Sandbox Code Playgroud)
而不是正确的
c.placeOrder(o);
Run Code Online (Sandbox Code Playgroud)
形成单向链路而不是双向链路.
仍在学习OOP,任何人都可以请求帮助解决这个问题的惯用和实用方法,而不诉诸"反思"或花哨的框架(无论如何都依赖于反思).
PS有一个类似的问题:在我的java模型中管理双向关联,但我觉得它不能回答我的请求.
PSS任何链接到在db4o之上实现业务模型的现实项目的源代码都非常感谢!