1. Mysql 分表
分表分为水平分表和垂直分表,常用的是水平分表,通常是将一个表结构不变,数据分成两份或者多份存在不同表中。原因是由于一个数据表数据太多,影响操作效率,所以可以根据表中某个关键字段进行分表,比如可以根据主键的区间,或者根据时间搓的区间,或者根据特定业务进行分表,目的是将一个表的数据分在两个结构相同但是名字不同的表中,可以快速进行各种操作。
垂直分表则是将表结构分割成两个或者多个表,通过外键进行连接。
2. Mysql 建立索引
mysql索引是可以用多种方式建立,常用的有Btree,hash等。多数应用使用BTree。
建立索引需要注意的是:
1. 选择合适的key进行索引。
2. 需要根据具体业务优化进行符合索引
3. 建立索引后使用select语句的注意点。
具体可以参考:
http://www.codinglabs.org/html/theory-of-mysql-index.html
http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html
http://www.perfgeeks.com/?p=460
http://www.linezing.com/blog/?p=664
3. CAP原理:
CAP原理:consistency,availability, Partition tolerance ,在分布式环境中,理论说只能保证其中两个,不能保证三个。Partition tolerance必须保证,所以consistency和availability只能保证一个,在Mysql数据库中强调consistency,而在Nosql环境中强调availability。
4. Mongodb
一种Nosql,是基于文档数据库。相比于memcache这样的kv系统,最大特点是可以建立索引,而索引的建立方法基本上和Mysql一样,使用的是BTree。关键需要考虑是mongodb的一致性,可扩展性,以及并发能力,索引效率等问题。
锁:根据mongodb官方文档的说法,mongodb不使用传统的锁。
MongoDB does not support traditional locking and complex transactions for a number of reasons:
单机一致性:单机情况下,单一线程读写保证一致性,即一个线程自己写的数据一定可以读出来。不同线程不保证写一致性,即如果发出了写冲突,mongodb不保证写一致性,需要用户自己解决冲突。
多机一致性:在多机情况下,即replicaset的情况下,如果允许在secondary的机器上进行读操作,可以会读到stale的数据,因为master已经被修改,而secondary可能还没有被更新。虽然primiary到secondary的更新速度很快,但是依旧存在不一致性,目的是提高可用性。
索引:同Mysql一样,使用BTree建立索引,效率感觉没有Mysql高,可能Mysql在索引方面优化做的比较好。
并发:暂时没有测试,网上数据表示不够乐观
参考:
一致性:
http://www.mongodb.org/display/DOCS/Atomic+Operations
http://stackoverflow.com/questions/8081629/mongodb-document-operations-are-atomic-and-isolated-but-are-they-consistent
http://www.allthingsdistributed.com/2007/12/eventually_consistent.html
5. log4j
6. webservice(cxf,axis2)
7. linux tcp tuning
8. mybatis,spring,struts.junit