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

2013-01-05 23:17:02 +08:00
 liuxurong
Mongo、Redis 这些之所以快不是因为他们放在内存里吗?为什么不直接把MySQL放进内存里?

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

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

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

mysql的优势做持久存储,成熟稳定,性能适中
ipconfiger
2013-01-25 13:04:02 +08:00
MySQL很早就有内存表......
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
2013-01-25 13:53:13 +08:00
其实NOSQL重点解决的不是存取速度问题,而是在数据分布性、冗余性、一致性三点间的取舍之间取得另外一个均衡点。

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

NOSQL不是因为快才提出的概念。
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
2013-01-26 23:28:59 +08:00
@sivacohan 太搞笑了,直接看 wiki 呗 http://en.wikipedia.org/wiki/B-tree
jones
2013-01-26 23:43:48 +08:00
@BigZ 不是简单协议简化,本质区别是绕过了MySQL的sql parse层,没有了语法解析优化这一层,基本就是是直接对innodb读写了,速度不比其他nosql产品慢
aa88kk
2013-01-27 00:01:07 +08:00
MYSQL 早就支持memory存储引擎而且可以选择hash index.
liangdi
2013-01-28 04:21:31 +08:00
nosql和sql的本质区别 并不是 内存不内存的区别。。。 主要还是储存格式的区别

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/56699

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX