- 論壇徽章:
- 2
|
回復(fù) 47# wangzhonnew
花了點時間看了一下。
1) 本來想拿點數(shù)據(jù)來試一下,找了citylots.zip ,然后用shp2json轉(zhuǎn)化了一下,想試試讀寫的速度,可是
./sdbimprt 根本用不了?戳饲懊娴囊粋文章才知道這個導(dǎo)入導(dǎo)出工具本身是有問題的,得不到cl的值
而且關(guān)于sdbimprt有一個參數(shù) -i 在文檔里 說這個不用帶文件后綴名? 這個不清楚什么意思,比如我的文件名/tmp/my.json.input.file 這個 -i應(yīng)該填成什么?
“
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
”
所以沒辦法拿大量數(shù)據(jù)來試了
2) 有個問題,好像找不到sql 的interface,dbshell好像只能運(yùn)行函數(shù) 除非用 db.execUpdate()和db.exec()
文檔里sql和function對應(yīng)的那張表,也對不上號,student(name), foo(bar)對不上
另外dbshell不能同時copy多行,即 選中復(fù)制多行命令到shell處 只能認(rèn)第一行。
dbshell的函數(shù)分大小寫,這樣有一些問題- > 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.
復(fù)制代碼 第一次做createCL操作,在我的環(huán)境里大約是0.8-0.9s 這比后面每次createcl時間要長,連續(xù)幾次的操作,后面幾次基本上都是0.5s完成的
還有一個問題,對比文檔里的"Error Code List",. 這邊-22指集合已存在,-23指集合不存在, 顯然當(dāng)我輸錯了命令大小寫,其錯誤碼也是不對的。
3) 試了幾個小特性
關(guān)于建CL,即相當(dāng)于RDBMS建表,建空表的時候基本沒有物理IO,這是很不錯的。只有在插入數(shù)據(jù)的時候才做實際的物理IO
適當(dāng)調(diào)高值,發(fā)現(xiàn)cpu/mem略升,但壓力不大(分析主要是建立connection的問題)- for i in `seq -w 800`
- do
- ./sdb -s "var db = new Sdb('localhost', 50000) ; db.foo.createCL('cl${i}')"
- done
復(fù)制代碼 當(dāng)我嘗試把800調(diào)高到8000時候就顯示
(nofile):0 uncaught exception: -15 //網(wǎng)絡(luò)錯誤
#文檔有說明只支持4096個CL
但此后我再嘗試去刪CL的時候已經(jīng)有問題了- > 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.
復(fù)制代碼 發(fā)現(xiàn)是服務(wù)器進(jìn)程已經(jīng)down了, 運(yùn)行sdbstop 再sdbstart后正常
但不能批量刪除,估計還是這個connection太多的原因。
同樣,因為每次都要new connection,導(dǎo)致這個sdb腳本化比較有難度。每一步都要新建連接。
4). 關(guān)于索引, 支持建在尚不存在的列上, 但這邊的索引都是B Tree的, 沒有多種選擇。
我想,這樣會有一個問題,大量IO的時候,會有index split
建立可以create index 在今后的版本里加上不同的index選項, 當(dāng)然如果覺得數(shù)據(jù)并不會很格式化,那么也無所謂。
5) 關(guān)于sql,還有很多改進(jìn)的空間,比如這邊where語句
因為外層已經(jīng)用了引號, 那么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.
復(fù)制代碼 關(guān)于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");
復(fù)制代碼 6)關(guān)于文檔提一點, 里面關(guān)于什么vi :wq的就不用寫進(jìn)去了,如果不是湊字?jǐn)?shù)的話。
7) 另外的性能問題,很多其實比較沒什么直接意義,像這里的產(chǎn)品,把read write server分開了,那么其io的性能必然是較好的,當(dāng)沒有rw分離的情況下呢? 我沒有搭多節(jié)點cluster,但我覺得如果用的節(jié)點間網(wǎng)絡(luò)比較慢,會是一個瓶頸。
-s |
|