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