Skip to content

Instantly share code, notes, and snippets.

@lanrion
Created October 13, 2014 03:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lanrion/aa13bb3cb660787165f3 to your computer and use it in GitHub Desktop.
Save lanrion/aa13bb3cb660787165f3 to your computer and use it in GitHub Desktop.
为什么Quora使用MySQL,而不是NoSQL?
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