V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
liuxurong
V2EX  ›  MySQL

[突发其想]为什么不把MySQL放进内存来代替NOSQL?

  •  
  •   liuxurong · 2013-01-05 23:17:02 +08:00 · 5797 次点击
    这是一个创建于 4128 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Mongo、Redis 这些之所以快不是因为他们放在内存里吗?为什么不直接把MySQL放进内存里?

    可行吗?求指教。
    17 条回复    1970-01-01 08:00:00 +08:00
    muxi
        1
    muxi  
       2013-01-05 23:23:57 +08:00
    囧,mysql 在5.1之后就支持很大的query buffer,如果你的内存足够大的话,设置这个参数就行了

    而且你说的根本不是一回事,mysql慢是因为他的存储引擎设计,如果mysql 换成handle socket 存储引擎,速度比MongoDB不慢

    接下来的mysql 5.6的大幅改进,会让各位惊喜
    wuxqing
        2
    wuxqing  
       2013-01-05 23:26:03 +08:00
    @muxi 有啥惊喜?
    muxi
        3
    muxi  
       2013-01-05 23:30:59 +08:00
    @wuxqing 很多,比如Innodb几乎重写了,速度和安全性较以前有大幅的提升,集成了更多oracle的技术积累,数据库内部开始支持KV DB(直接集成了Memcache,你以后直接访问DB就能访问到缓存了),还有其他的更优秀功能加入,但我更期待NDB引擎的植入,这样连索引都可以直接放到内存去了
    liprais
        4
    liprais  
       2013-01-05 23:41:57 +08:00
    memsql
    Veelian
        5
    Veelian  
       2013-01-05 23:45:20 +08:00 via iPhone
    @muxi 觉着很难啊,从实现原理来看,KVDB是散列无序,而关系数据库是有序索引,如果把KVDB引擎做到关系数据库里那不又成KVDB了么
    VYSE
        6
    VYSE  
       2013-01-05 23:59:51 +08:00
    @muxi NDB引擎真心有一坨问题,跨表查询即使开启AQL也是硬伤
    BigZ
        7
    BigZ  
       2013-01-06 01:16:51 +08:00
    @muxi handle socket 不是存储引擎,只是简化的mysql client协议,存储用的innodb
    sivacohan
        8
    sivacohan  
       2013-01-06 02:07:49 +08:00
    MySQL不是B-tree吗?
    话说B-tree是什么……
    BigZ
        9
    BigZ  
       2013-01-25 13:01:14 +08:00
    实际上很多应用就这样做的

    mysql的优势做持久存储,成熟稳定,性能适中
    ipconfiger
        10
    ipconfiger  
       2013-01-25 13:04:02 +08:00
    MySQL很早就有内存表......
    kernel1983
        11
    kernel1983  
       2013-01-25 13:40:25 +08:00
    尽量避免复杂的sql join, 你的系统就差不多哦已经是nosql了
    比如将user的所有post ids存起来, 这样连where都不用了, 直接select from IN

    然后将数据的index和payload分开, 总结起来就是尽量从对索引的依赖转变成KV的编程方法, 加上点分布式可扩展, 靠用nosql产品省掉智力劳动, 算偷懒吧

    我自己完成了一个简单的nosql框架 https://github.com/kernel1983/NoMagic, 已经生产环境下使用. 但是无文档, 请随意参考修改
    BOYPT
        12
    BOYPT  
       2013-01-25 13:53:13 +08:00
    其实NOSQL重点解决的不是存取速度问题,而是在数据分布性、冗余性、一致性三点间的取舍之间取得另外一个均衡点。

    因为时间空间等客观限制,任何数据都无法完全3点都极度保证的,NOSQL剪除了数据关系这层模型,在存储技术难度上降低一些等级,让3点到达一个更符合需求的均衡点。

    NOSQL不是因为快才提出的概念。
    udonmai
        13
    udonmai  
       2013-01-25 14:03:48 +08:00
    这是要看应用场景的。。。你见过哪个公司会全盘接收内存式的NoSQL?

    举个例子,据SINA自己说它是世界上最大的Redis使用者,然而Redis在微博也就只占很小的比例,而且因为是内存式的,即便可以定时写磁盘,它还是不稳定。而且NoSQL不支持完整事务。所以光快而不考虑其他因素是无意义的。

    同样的,关系型数据库的症结还在于扩展性和性能,它有很好的模式支持以及持久性,同时通过各种sharding或者replication来冗余和支持大数据。放内存只能部分增加读写的性能,缓解IO问题,而对其他各方面而言,只会减弱。

    而且就像楼上说的,关系型数据库们都有缓冲层,可大可小,但是毕竟内存有限,缓存还是无法保存所有的数据,所以和操作系统内存一样用一些例如FIFO的替换算法来重建缓存。即便如此,该读磁盘的时候,延时还是相当可怕。

    所以说到底放内存是不现实的,各种存储都有相应的tradeoff。


    不久前大家开始考虑到SSD了,虽然目前性价比不高,但已经开始普及了。类似公开的像FB和baidu都在部署了,很多机房也都上了全SSD。它的性能介于内存和磁盘,目前而言完全胜任。

    学术界还在为CAP而苦苦挣扎,目前没有万全的办法,Google的spanner就是底层NoSQL盖上关系型SQL(简而言之是这样,具体参照论文)以达到两者的平衡,获得两者的益处。不过话是这么说,终究还是会有tradeoff。
    loddit
        14
    loddit  
       2013-01-26 23:28:59 +08:00
    @sivacohan 太搞笑了,直接看 wiki 呗 http://en.wikipedia.org/wiki/B-tree
    jones
        15
    jones  
       2013-01-26 23:43:48 +08:00 via Android
    @BigZ 不是简单协议简化,本质区别是绕过了MySQL的sql parse层,没有了语法解析优化这一层,基本就是是直接对innodb读写了,速度不比其他nosql产品慢
    aa88kk
        16
    aa88kk  
       2013-01-27 00:01:07 +08:00
    MYSQL 早就支持memory存储引擎而且可以选择hash index.
    liangdi
        17
    liangdi  
       2013-01-28 04:21:31 +08:00
    nosql和sql的本质区别 并不是 内存不内存的区别。。。 主要还是储存格式的区别
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5640 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 02:31 · PVG 10:31 · LAX 19:31 · JFK 22:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.