PythonTip >> 博文 >> 系统架构

老潘一言谈:Zope 系列之:ZODB

zihua 2013-09-26 01:09:38 点击: 1196 | 收藏


zope 最有价值的是什么?

我现在想出3个:

1. zodb
2. 组件架构
3. 对象发布

前面2个都是可以在zope外面使用的。也就是说zodb是完全可以和zope无关系的。

虽然zope的可以不使用zodb工作,但是没有zodb的zope,我觉得基本没什么优势了,开发速度会大大降低。当年canonical的lauchpad,就是没有用Zodb。据说开发人员抱怨非常多。

我也曾经尝试用关系数据库和O-R映射,那个痛苦,实在难以忘怀。一旦使用zodb,就不能离开了。我深深同情,所有还在使用关系数据库进行开发的同学。

zodb是对象数据库,也是最流行的nosql数据库之一。但zodb发展非常多年,应该有10多年了,这比最新的其他nosql来说,是老大哥了。

说一些zodb的特点:

1. 这个数据库是no schema的,就是不需要数据库定义,想存放什么进去,就存放什么。

2. 数据库存储是层次结构的,或者说是树状的,和我们的文件系统类似,这个很适合内容管理系统。对我们复杂的易度,也非常适合。

3. 和pythton语言绑定。这是好处,也是坏处。他实际上存放的就是python的pickle。好处是基本不必知道数据库的存在,坏处是其他语言不能使用。

4. zodb可以利用关系数据库来存储的,比如使用oracle,postgresql,mysql等。这些关系数据库在备份、replication等做得非常好了,因此可以直接借用。

5. 自带对象缓存的管理。最新的版本可以利用memcached来进行自动对象缓存。

6. zodb自身的代码量不多,但是真正要用好,需要上次的一些对象的支持:

- 索引和搜索:这必须通过上层的软件包实现,zodb不自带这个的。当然zope可实现非常复杂的索引,比如针对路径的索引。

- 对象扩展附加信息的管理,也就是annotation的管理。这是一套标准的信息存储机制了,很容易扩展。比如不同的应用,在同一对象上附加一些信息。

在易度里面,每个对象都可以评注,每个对象都可以设置权限,包括对象的dublincore元数据,这些信息都存放在annotation里面的。

- 对象之间的关系,比如一对多,多对多的关系管理。zope上有专门的relation的管理。

说zope难,其实难点就在于需要了解zodb这些特异的东西。我们在传统关系数据库里面的做法,在zodb里面失效了。我们需要重新学习新的做法,理解新的做法。

想当年,我们学习关系数据库,那是多厚的一本书,是耗费了时光和岁月的。真正的掌握zodb,那也是需要有一些时间。

但一旦掌握,真的是事半功倍的。

最后强调一下,zodb是可以完全脱离zope的,甚至可以在纯客户端的程序上使用。

刚刚google了下,发现zodb学乖了,有自己的独立域名了:http://www.zodb.org/

居然在ibm developworks上还有介绍zodb的文章:
http://www.ibm.com/developerworks/cn/aix/library/au-zodb/

zodb 也有缺点:

1. 性能上肯定是不如关系数据库

特别是那些写操作非常频繁的,就更不适合了。

2. 统计分析的能力有限,这个关系数据库是高手

不过这个可以zodb和关系数据库配合完成

3. zodb是对象级的锁,可能有很多冲突,虽然zodb提供了冲突解决机制,但是肯定不如sql来得有效,sql在数据库服务器端由很多避免冲突的手段。 

其实zodb不是一般的nosql

现在的nosql,起因都是关系数据库对大数据量高负载访问的一些问题设计的。

但是zodb,主要目的是为了简化开发。

所以二者区别在这里。具体性能方面的比较,我其实现在没有详细的数据。对象数据库能够一次读取对象的所有数据,而不必在多个表里面查,我觉得这也是有优势的。

如果应用是类似SNS这样的,数据是海量的,其他的nosql可能更适合些。

如果应用是面向企业,如同我们everydo的定位,zodb则更适合的。而且企业应用更加复杂,更适合zodb发挥快速开发的效用。 

补充说明

俺觉得zodb对现在云计算,是有优势的。

比如如果数据量大,可能存在“分表”的操作,但是在zodb里面,这个太容易了。

但这些优势,都在于编程简单。

但是性能方面,我现在难以给出准确的数据。

不过最近得知plone 4.0的速度,已经超过了drupal这样的cms,至少表示zodb的速度 不会比sql差太多?

---

# 潘俊勇@新浪:http://weibo.com/panjunyong

# 潘俊勇@腾讯:http://t.qq.com/panjunyong

原文链接:http://www.simple-is-better.com/news/559

作者:zihua | 分类: 系统架构 | 标签: zope zodb 易度 | 阅读: 1196 | 发布于: 2013-09-26 01时 |