- 论坛徽章:
- 2
|
回复 47# wangzhonnew
花了点时间看了一下。
1) 本来想拿点数据来试一下,找了citylots.zip ,然后用shp2json转化了一下,想试试读写的速度,可是
./sdbimprt 根本用不了。看了前面的一个文章才知道这个导入导出工具本身是有问题的,得不到cl的值
而且关于sdbimprt有一个参数 -i 在文档里 说这个不用带文件后缀名? 这个不清楚什么意思,比如我的文件名/tmp/my.json.input.file 这个 -i应该填成什么?
“
2013-10-30-06.59.18.541401 Level:ERROR
PID:14968 TID:14968
Function:getCollection Line:503
File:SequoiaDB/engine/pmd/sdbimprt.cpp
Message:
Failed to get collection bar, rc = -75
”
所以没办法拿大量数据来试了
2) 有个问题,好像找不到sql 的interface,dbshell好像只能运行函数 除非用 db.execUpdate()和db.exec()
文档里sql和function对应的那张表,也对不上号,student(name), foo(bar)对不上
另外dbshell不能同时copy多行,即 选中复制多行命令到shell处 只能认第一行。
dbshell的函数分大小写,这样有一些问题- > var db = new Sdb('localhost', 50000)
- Takes 0.13928s.
- > db.foo.createCL('cl10')
- localhost:50000.foo.cl10
- Takes 0.845s.
- > db.foo.createCL('cl11')
- localhost:50000.foo.cl11
- Takes 0.436s.
- > db.foo.createCL('cl12')
- localhost:50000.foo.cl12
- Takes 0.502s.>
- db.foo.createCL('cl12')
- (nofile):0 uncaught exception: -22
- Takes 0.507s.
- > db.foo.createcl('cl12')
- (nofile):0 uncaught exception: -23
- Takes 0.380s.
复制代码 第一次做createCL操作,在我的环境里大约是0.8-0.9s 这比后面每次createcl时间要长,连续几次的操作,后面几次基本上都是0.5s完成的
还有一个问题,对比文档里的"Error Code List",. 这边-22指集合已存在,-23指集合不存在, 显然当我输错了命令大小写,其错误码也是不对的。
3) 试了几个小特性
关于建CL,即相当于RDBMS建表,建空表的时候基本没有物理IO,这是很不错的。只有在插入数据的时候才做实际的物理IO
适当调高值,发现cpu/mem略升,但压力不大(分析主要是建立connection的问题)- for i in `seq -w 800`
- do
- ./sdb -s "var db = new Sdb('localhost', 50000) ; db.foo.createCL('cl${i}')"
- done
复制代码 当我尝试把800调高到8000时候就显示
(nofile):0 uncaught exception: -15 //网络错误
#文档有说明只支持4096个CL
但此后我再尝试去删CL的时候已经有问题了- > var db = new Sdb('localhost', 50000)
- (nofile):0 uncaught exception: -15
- Takes 0.12956s.
- >
- > db.foo.dropCL('cl3')
- (shell):1 TypeError: db is undefined
- Takes 0.159s.
- > var db1 = new Sdb('localhost', 50000)
- (nofile):0 uncaught exception: -15
- Takes 0.12544s.
复制代码 发现是服务器进程已经down了, 运行sdbstop 再sdbstart后正常
但不能批量删除,估计还是这个connection太多的原因。
同样,因为每次都要new connection,导致这个sdb脚本化比较有难度。每一步都要新建连接。
4). 关于索引, 支持建在尚不存在的列上, 但这边的索引都是B Tree的, 没有多种选择。
我想,这样会有一个问题,大量IO的时候,会有index split
建立可以create index 在今后的版本里加上不同的index选项, 当然如果觉得数据并不会很格式化,那么也无所谓。
5) 关于sql,还有很多改进的空间,比如这边where语句
因为外层已经用了引号, 那么select本身等号后面的值,非专有值,非变量值就加不了引号,也不能包括引号了。- > db.exec("select * from foo.bar where last=Black");
- {
- "_id": {
- "$oid": "5270b0985f7f5d413a000000"
- },
- "first": "Jhon",
- "last": "Black"
- }
- {
- "_id": {
- "$oid": "5270b1c05f7f5d413a000001"
- },
- "first": "Jhon2",
- "last": "Black"
- }
- Return 2 row(s).
- Takes 0.1434s.
复制代码 关于groupby
其效果是和mysql的相同的,和oracle的不一样。同样语句在oracle报错
此处如果只取一项groupby last,则上面两值只有一个。- > db.exec("select * from foo.bar where last=Black group by last");
- > db.exec("select * from foo.bar where last=Black group by last,first");
- > db.exec("select * from foo.bar where last=Black");
复制代码 6)关于文档提一点, 里面关于什么vi :wq的就不用写进去了,如果不是凑字数的话。
7) 另外的性能问题,很多其实比较没什么直接意义,像这里的产品,把read write server分开了,那么其io的性能必然是较好的,当没有rw分离的情况下呢? 我没有搭多节点cluster,但我觉得如果用的节点间网络比较慢,会是一个瓶颈。
-s |
|