一直好奇于MongoDB的读写速度以及它的特有的NoSQL查询机制。有幸作了一次Sybase ASA(SQLAnywhere12)和MongoDB写入数据行的速度的比较。
这对于大规模Web访问来说,非常重要。
比较基准:
写入100000行,每行三列,id(整数), name varchar(32), col_blob或clob,8K左右长度。比较最终的写入时间。
1. ASA12:
dbinit.exe bench.db
dbeng12.exe bench.db
代码如下:
end time: 2012-04-12 17:55:16.971, 大概花了11分钟。是够慢的。
运行时需要指定-Djava.library.path=/bin32目录。
2. MongoDB:
启动:mongod.exe --dbpath E:\xionghe\MongoDB\mongodb\data
客户端简单命令:
db.testCollection.count()
代码如下:
begin time: 2012-04-12 18:11:18.99
end time: 2012-04-12 18:11:44.412
只花了: 26秒左右。
我只能说差距太明显了。。。。。。。
再看看生成的文件大小:
bench.db: 814,900KB, .log: 819328KB.
mongodb的testdb: test.* (test.0, ... test.5)共6个文件1,073,479,685B也就1G左右。
分析:
ASA之所以慢如此之多,一是它基于关系表,有一个BLOB/CLOB字段要跨页存储,同时它要维护主键的索引。MongoDB则没有维护索引。可能对testCollection创建一个索引,再进行比较更合理一些,但我有理由相信,即算加上索引,MongoDB也比ASA要快很多。
看来,MongoDB适用于互联网所言非虚。
不过,我再看了下MongoDB的license:
是一个开放源码项目,其数据库基于 GNU AGPL (Affero General Public License) version 3.0 的许可。此许可是 GNU GPL 的一个修正版,它弥补了版权限制不适用于软件使用而仅适用软件分发的漏洞。这对于在云中存储而不经常安装在客户端设备上的软件当然是重要的。使用常规 GPL ,您会感觉到实际上无法进行分发,因此潜在地规避了许可条款。
AGPL 只适用于它自己的数据库应用程序,不适用于 MongoDB 的其他组成部分。允许开发人员从各种编程语言连接 MongoDB 的官方驱动程序在 Apache License Version 2.0 许可下分发。 MongoDB 文档的使用基于 Creative Commons 许可。
这是否意味着,如果我要开发一款基于Cloud的大型互联网应用,可以直接使用MongoDB和自己的产品集成,而没有任何法律风险?
有熟悉此道的朋友,请告诉我。。。