论坛首页 综合技术版 Database

关于db4o中在C/S模式下如何保证对全局共享数据的可靠并发访问 。

浏览 695 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-10-28 关键字: db4o C/S 并发

db4o简介:

db4o 是一个开源的纯面向对象数据库引擎,对于 Java 与 .NET 开发者来说都是一个简单易用的对象持久化工具,使用简单。

  • 100% 的原生 查询语言应能用实现语言( Java 或 C# )完全表达,并完全遵循实现语言的语义。
  • 100% 的面向对象 查询语言应可运行在自己的实现语言中,允许未经优化执行普通集合而不用自定义预处理。
  • 100% 的类型安全 查询语言应能完全获取现代 IDE 的特性,比如语法检测、类型检测、重构,等等。
  • 开源模式。与其他 ODBMS 不同,db4o 为开源软件,通过开源社区的力量驱动开发 db4o 产品。
  • 高性能。 图2为 db4o 官方公布的基准测试数据,db4o 比采用 Hibernate/MySQL 方案在某些测试线路上速度高出 44 倍之多!并且安装简单,仅仅需要 400Kb 左右的 .jar 或 .dll 库文件。在接下来的系列文章中,我们将只关注在 Java 平台的应用,但是实际上 db4o 毫无疑问会很好地在 .NET 平台工作。
  • 易嵌入。使用 db4o 仅需引入 400 多 k 的 jar 文件或是 dll 文件,内存消耗极小。
  • 零管理。使用 db4o 无需 DBA,实现零管理。
  • 支持多种平台。db4o 支持从 Java 1.1 到 Java 5.0,此外还支持 .NET 、 CompactFramework 、 Mono 等 .NET 平台,也可以运行在 CDC 、 PersonalProfile 、 Symbian 、 Savaje 以及 Zaurus 这种支持反射的 J2ME 方言环境中,还可以运行在 CLDC 、 MIDP 、 RIM/Blackberry 、 Palm OS 这种不支持反射的 J2ME 环境中。

    -----------------------------------------------------------------------------------------------------

    对db4o很是感兴趣,最近在学习db4o,学习的过程中,想到一个问题:就是在C/S模式下,多个客户端同时访问数据库,如何保证对全局共享数据的可靠并发访问。例如,在db4o中C/S模式下如何实现并发地安全可靠地生成唯一有序序号。--类似关系数据库中的sequence。

    看了db4o API 和相关资料,发现了一下两种方法,

    1.信号量方式 

    ExtObjectContainer类中定义了信号量相关函数。 SetSemaphore,和ReleaseSemaphore。

    从帮助文档(SetSemaphore)来看,

    Possible usecases for semaphores:
    - prevent other clients from inserting a singleton at the same time. A suggested name for the semaphore: "SINGLETON_" + Object#getClass().getName().
    - lock objects. A suggested name: "LOCK_" + getID(Object)
    - generate a unique client ID. A suggested name: "CLIENT_" + currentTime.

    可以实现对共享数据的可靠访问。

    2.使用Message方式(Db4objects.Db4o.Messaging 命名空间中定义),使用服务器端单例运行一段代码,所有共享相关的处理,交给这段代码来执行。

    http://developer.db4o.com/Resources/view.aspx/Reference/Client-Server/Messaging

    http://developer.db4o.com/Resources/view.aspx/Reference/Client-Server/Remote_Code_Execution/Remote_Execution_Through_Evaluation_API

    http://developer.db4o.com/Resources/view.aspx/Reference/Client-Server/Remote_Code_Execution/Using_Messaging_API_For_Remote_Code_Execution

    从实现角度来说,使用信号量加锁方式可能更符合我们以往的编程习惯(多线程并发编程)。而基于消息的方式个人直观感觉,系统整体并发性能会更好一些。关于Message方式,从资料得倒以下启示: 1,任意代码可以被在服务器端执行。2,代码将被序列化并通过网络发送,3,更改代码后,应该更新所有客户端。4,MessageSender 对象可以被复用来发送多个Message。5,可以控制服务器做某些事情,比如关闭,重启,备份,限制客户端等。

    引用资料。

    http://www.ibm.com/developerworks/cn/java/j-lo-db4o1/

    http://www.open-open.com/open16610.htm

     

     

  •    
    论坛首页 综合技术版 Database

    跳转论坛:
    JavaEye推荐