Created
October 13, 2014 03:39
-
-
Save lanrion/aa13bb3cb660787165f3 to your computer and use it in GitHub Desktop.
为什么Quora使用MySQL,而不是NoSQL?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1. MySQL的Scalability问题可以解决: | |
1. 不要使用JOIN等跨库跨表操作 | |
2. MySQL分库分表,APP根据hash( primary key )来访问对应的库表;将MySQL库表部署在不同机器的不同MySQL实例上,实现分布式。可以在create table的时候,默认规划好千库百表 | |
2. 分布式NoSQL,比如MongoDB或CouchDB,不够稳定;除非深入理解,出问题不好解决。不希望重要的在线数据,依赖于有风险的新技术 | |
3. MySQL有一套完整的工具链,和成熟的提升性能的方法论。MySQL DBA可以帮你做这些事情: | |
1. 升级硬件,使用64GB RAM和SSD | |
2. 建MySQL master-salve:master只写,slave只读 | |
3. sharding,denormalization,SQL tunning | |
4. 使用MemCached或Redis等缓存系统,MySQL只用担心写请求 | |
5. MySQL中尽量不要存大数据,可以存入S3等对象存储 | |
4. 在APP和MySQL中间增加一层Proxy,实现MySQL的auto sharding和迁移,控制APP请求到MySQL的路由 | |
5. RDBMS的数据模式,更贴近Quora类的UGC网站 | |
另外,MySQL有一个弊端:Schema固定,线上业务要add column,可能造成长时间锁表,影响正常业务。 | |
以上总结来自前Facebook CTO,现Quora Founder在Quora上一个问答。 | |
http://www.quora.com/Quora-Infrastructure/Why-does-Quora-use-MySQL-as-the-data-store-instead-of-NoSQLs-such-as-Cassandra-MongoDB-or-CouchDB |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment