1
daiv OP 我的需求:数据库只做 插入和查询操作,不需要 更新 操作。只有2个表,数据1—100万之间。
|
2
ixiaohei 2013 年 12 月 5 日 mysql
|
3
ipconfiger 2013 年 12 月 5 日 @daiv 每一条多大呢?
|
4
daiv OP @ipconfiger 小于100k
|
6
ipconfiger 2013 年 12 月 5 日 @daiv 按每条100K计算,100w条大概有10G左右的数据,还是上正儿八经的数据库吧,128M什么的就不要想了。bdb,sqlite,leveldb神码的都存在多进程的问题,且bdb和leveldb都需要内存
|
7
daiv OP |
8
clino 2013 年 12 月 5 日 sqlite 我觉得注意一下是可以提高并发的,减少被锁影响的方法:
-将timeout时间设长一些 -将操作数据库的时间尽量缩短,例如读就一把读出来再处理,写也是把要写的数据全部准备好了一把写入 |
9
daiv OP @ipconfiger 一般10万条左右,上面写错了
|
10
yakczh 2013 年 12 月 5 日 memsql
|
11
clino 2013 年 12 月 5 日 上面减少操作数据库时间的具体做法,我在用uliweb的时候用到过一个就是
for item in model: 这里面对model的遍历会引发对数据库的操作,这样如果for里做得时间比较多,花的时间比较长,那占用的时间就长了 可以改成这样: for item in list(model): 这样就将操作数据库的时间最小化了 还有我碰到一个情形是,除了web的进程,还有一些daemon进程也会操作数据库,后来就改成调用web api来做,这样把对数据库的操作都集中到web进程里,这样我觉得对避免这个问题也有好处 |
12
ipconfiger 2013 年 12 月 5 日 @daiv 你就只有128M的VPS啊?
|
13
tshwangq 2013 年 12 月 5 日 firebird?
|
14
moroumo 2013 年 12 月 5 日 我用得也是sqlite,也是128M VPS,哈哈。
注重一下业务流程上能不能简化,避免读写冲突 |
15
ipconfiger 2013 年 12 月 5 日
@daiv 1G,2G的数据可以继续用SQLite,为了避免锁问题,可以用一个独立的进程单线程访问SQLite数据库,然后web用tornado异步请求
|
16
tshwangq 2013 年 12 月 5 日
Kyoto Cabinet, 似乎也是个不错的选择。
|
17
likuku 2013 年 12 月 5 日 加一个memcached…读的负载转移到内存去。
|
18
tshwangq 2013 年 12 月 5 日 |
19
barbery 2013 年 12 月 6 日
用mysql的myisam表, 关闭innodb, 应该耗不了多少内存吧
|
20
loading 2013 年 12 月 6 日 via iPhone
数据量不大可以使用sqlite内存方式
|
21
loading 2013 年 12 月 6 日 via iPhone
分割为多个sqlite文件,查询前先判断在哪个文件(数据库),毕竟你只有128m
|
23
daiv OP @ipconfiger 有 256 512,1G 都有呀,不是单单 128 啦
|
27
loading 2013 年 12 月 6 日 via iPhone
把表再拆一次,如名字a-f一个
|
28
hjie 2013 年 12 月 6 日
sqlite 写入锁 多线程下 真的很烦啊
|
29
tshwangq 2013 年 12 月 6 日
@daiv 嘿嘿,我也是看到你这个需求很感兴趣,感觉可能有一款类似sqlite的nosql存在,所以搜索了下,其实没有实战经验。 记得updates一下你最终结果哦。
|
30
usoluyun 2013 年 12 月 6 日
数据库写入都是有锁的吧,否则mysql也不会搞什么读写分离了吧。关键是读的时候要指定 no lock不是么?
|
32
yolio2003 2013 年 12 月 6 日
非常喜欢sqlite,留名学习提高并发的方法~
|
33
uwh5ed9 2013 年 12 月 6 日
mark
|
34
takwai 2013 年 12 月 6 日
用 15 楼方法,或者设置一下使用 WAL 模式 http://www.sqlite.org/draft/wal.html
|
35
ipconfiger 2013 年 12 月 6 日
WAL是好办法
|
36
ericls 2013 年 12 月 6 日
128M还是跑sqlite吧
我之前是因为跑不动mysql才跑的sqlite 放的自己的一个小博客 有一段时间了 反正没流量 所以也就没有进一步的需求 不过楼主这种站子做大了 换大一点的服务器也是应该的吧。。。 搞点内存配合memcached redis神码的用 |
37
daiv OP @ipconfiger wal 模式 读写不干涉,挺好的。
@takwai 要尝试一下 wal,读和写之间不会阻塞 @ericls sqlite 还是很省资源的,我还有更大的内存啦,sqlite 128够用,知识有锁。 @hjie 是呀,sqlite 要是没读写的冲突,那就很爽了 @usoluyun 读得时候 sqlite 没有锁吧 |
38
est 2013 年 12 月 6 日
|
39
duzhe0 2013 年 12 月 6 日
Mysql的默认存储引擎Myisam就做到并发插入和读取。
|
40
zstxt1989 2013 年 12 月 6 日
可以试试mongodb
|
42
duzhe0 2013 年 12 月 7 日
是的。Myisam引擎虽然是表级的读写锁,但插入却不需要写锁。所以对于没有update的场景,Myisam的并发性能足够好。
|