Chinaunix首页 | 论坛 | 博客
  • 博客访问: 169329
  • 博文数量: 41
  • 博客积分: 1679
  • 博客等级: 上尉
  • 技术积分: 730
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-24 10:24
文章分类

全部博文(41)

文章存档

2011年(34)

2010年(7)

分类: 数据库开发技术

2011-05-27 17:41:48


《Cassandra实战》前言

为什么写本书
    最早开始接触Cassandra是在2010年年初,那时Cassandra才刚刚进入人们的视线。由于传统的数据库已经无法满足项目业务的需求,公司便派我去寻找和尝试其他的数据库解决方案。当时有两种备选方案:Hadoop项目中的HBase和Facebook开源的Cassandra。
    在对比了各方面的资料和分析了项目的业务需求之后,我们最终选择了配置简单、部署方便,使用高效的Cassandra。与HBase不同,Cassandra是一套独立的系统,不需要搭建和了解HDFS及Zookeeper集群即可开始使用,并且可以在Windows系统中直接进行测试。所以,我们在很短的时间之内就完成了功能和性能的评估,为后期的项目实施做好了技术储备。
    到2010年6月份,部门开始正式搭建实时数据中心,需要将公司前台数据库产生的业务数据定期抽取到实时数据中心,提供给业务部门的相关人员使用。于是我们开始设计Cassandra的业务数据存储结构,并开始分析Cassandra内部的实现机制和源代码,从Cassandra的工作原理上指导我们的业务数据存储结构设计和测试方案。在整个设计和测试的过程中,我们遇到的一些问题,都可以通过活跃的Cassandra开发社区和开放的源代码找到答案。而且,我们还可以通过修改少量的源代码来修复一些BUG和增强系统管理的特性。最终,这些修改也都在开源社区提供的后续版本中得到了体现。得益于活跃的开源社区,Cassandra的功能和版本也在不断地更新。尤其是在最新的Cassandra 0.7.x版本中,提供了大家都非常期待的二级索引与在线更新Schema的功能。
    Datastax公司作为Cassandra的主要开发成员,开始为Cassandra的使用者提供相应的服务支持,并开发出了一系列强大的工具,进一步提高了Cassandra的实用性。另外,在2011年的5月,Datastax将提供一款振奋人心的工具——Brisk。通过Brisk,Cassandra将取代Hadoop项目中的HDFS和HBase的角色,直接与Hadoop项目中的MapReduce和Hive项目进行集成,从而提高整个海量数据分析系统的性能和易用性。
    相信未来Cassandra能够我们带来更多的惊喜。

本书面向的读者
  • 初中级程序员。他们可以从《Cassandra实战》中的实际例子了解Cassandra的基本概念,以及如何通过各种编程接口在Cassandra中写入和读取数据,如何建立二级索引,如何动态修改Schema信息,如何通过MapReduce做海量的数据分析,等等。
  • 中高级程序员。他们可以通过本书对源代码的分析和讲解来了解Cassandra中的内部实现原理,从而能选用更加高效的实现方式,调整最适合的Cassandra集群运行配置,增强程序的整体运行性能和稳定性。
  • DBA和系统运维人员。他们可以通过本书中的运维管理等内容,了解如何在Cassandra集群中安全高效地增加或减少服务器,以及如何恢复集群的错误,等等。
  • 系统架构师。他们可以根据本书所讲的内容掌握Cassandra能做什么,不能做什么,适合做什么,从而为不同项目做出最合适的架构选型。    

联系作者
    正如大家所知,开源技术的更新速度非常之快,Cassandra亦是如此。尽管我们已经很努力地将最新的内容融入其中,但仍难免会遗留部分内容。所以,如果你发现本书存在任何错误和问题,或者是你对书中的某些内容不理解需要与我们进一步探讨,再或者是你有好的意见或建议,都欢迎随时与我取得联系,我的邮箱是:gpcuster@gmail.com。
    另外,我的个人博客也会经常更新关于Cassandra的最新动态和使用心得等内容,也欢迎大家来这里与我交流。博客的地址是:http://gpcuster.cnblogs.com。新浪微博地址:http://weibo.com/gpcuster

致谢
    感谢老张、许玉勤和姜迅,是你们的信任与支持给了我接触和学习Cassandra的机会和应用Cassandra的平台。
    感谢童家旺、何勇、任振中、王海和陈晓峰,在学习和应用Cassandra的过程中,你们给予了我很多帮助与支持。
    感谢我的家人,一年来,我的大部分原来属于你们的业余时间都给了这本书,感谢你们的理解。
    感谢杨福川和曾珊两位编辑为本书付出的耐心与努力,你们为本书提出了很多宝贵的建议,你们的敬业精神令我钦佩。
    感谢本书的所有读者,希望你们能从本书中有所收获,大家的认可是我不断前进的动力。
郭鹏
2011年4月


目录

前言
第1章认识NoSQL/1
1.1NoSQL的起源和发展现状/2
1.2为什么要使用NoSQL/2
1.3开源NoSQL产品介绍/3
1.3.1Key/Value的NoSQL数据库/3
1.3.2面向文档的NoSQL数据库/4
1.3.3面向列的NoSQL数据库/5
1.3.4面向图的NoSQL数据库/6
1.4本章小结/7
第2章Cassandra快速入门/9
2.1在Windows环境运行单机版Cassandra/10
2.1.1配置JRE/11
2.1.2配置运行Cassandra 0.6.x/11
2.1.3配置运行Cassandra 0.7.x/12
2.2在Linux环境运行单机版Cassandra/14
2.2.1配置JRE/14
2.2.2配置运行Cassandra 0.6.x/15
2.2.3配置运行Cassandra 0.7.x/16
2.3Cassandra的数据模型/18
2.3.1Column/18
2.3.2SuperColumn/18
2.3.3ColumnFamily/19
2.3.4Keyspace/20
2.4Cassandra的数据排序规则/20
2.5配置数据类型/22
2.6使用命令行工具与Cassandra交互/23
2.6.1与Cassandra 0.6.x进行交互/23
2.6.2与Cassandra 0.7.x进行交互/24
2.7本章小结/26
第3章理解Cassandra编程接口/27
3.1多语言服务开发框架Thrift/28
3.2Cassandra的数据类型/28
3.2.1Column/28
3.2.2SuperColumn/29
3.2.3ColumnOrSuperColumn/29
3.2.4ColumnParent/29
3.2.5ColumnPath/30
3.2.6SliceRange/30
3.2.7SlicePredicate/31
3.2.8Deletion/31
3.2.9Mutation/31
3.2.10KeyRange/31
3.2.11KeySlice/32
3.2.12TokenRange/32
3.2.13AuthenticationRequest/32
3.2.14ConsistencyLevel/33
3.2.15NotFoundException/33
3.2.16InvalidRequestException/34
3.2.17UnavailableException/34
3.2.18TimedOutException/34
3.2.19AuthenticationException/34
3.2.20AuthorizationException/35
3.3Cassandra的编程接口/35
3.3.1get/35
3.3.2get_slice/36
3.3.3multiget_slice/36
3.3.4get_count/37
3.3.5get_range_slices/37
3.5.6insert/38
3.3.7remove/38
3.3.8batch_mutate/39
3.3.9describe_keyspaces/39
3.3.10describe_keyspace/39
3.3.11describe_cluster_name/40
3.3.12describe_version/40
3.3.13describe_ring/40
3.4Cassandra 0.7.x版本新增功能/40
3.4.1二级索引/40
3.4.2动态修改Schema/44
3.4.3自动清除过期数据/46
3.5本章小结/47
第4章基于Cassandra的在线交易系统/49
4.1需求分析/50
4.2数据模型设计/50
4.2.1Seller/51
4.2.2Buyer/51
4.2.3Product/52
4.2.4ProductCategory/53
4.2.5Comment/54
4.3编码实现/54
4.3.1修改Keyspace设置/55
4.3.2建立Eclipse项目/56
4.3.3实体对象实现/55
4.3.4Cassandra数据操作接口实现/56
4.4系统功能验证/60
4.4.1BuyerDao功能验证/60
4.4.2SellerDao功能验证/61
4.4.3ProductDao功能验证/62
4.5迁移到Cassandra 0.7.x/65
4.5.1建立Eclipse项目/65
4.5.2修改编译错误代码/65
4.5.3新增Schema在线定义功能/69
4.5.4功能验证/70
4.6本章小结/71
第5章Cassandra的集群机制/73
5.1一致性哈希/74
5.1.1理解一致性哈希/74
5.1.2一致性哈希在Cassandra中的应用/77
5.2Gossip:集群节点之间的通信协议/81
5.2.1FailureDetector/82
5.2.2Gossiper/83
5.3集群的数据备份机制/88
5.3.1EndpointSnitch/88
5.3.2ReplicationStrategy/91
5.4集群状态变化的处理机制/96
5.4.1StorageLoadBalancer/97
5.4.2StorageService/98
5.4.3MigrationManager/99
5.5本章小结/99
第6章Cassandra的内部数据存储结构/101
6.1Cassandra中的数据存放规则/102
6.2Commilog/102
6.3Memtable/103
6.4SSTable/105
6.4.1Filter文件/105
6.4.2Index文件/107
6.4.3Data文件/109
6.4.4Statistics文件/113
6.5系统表空间/113
6.6本章小结/114
第7章Cassandra的数据更新机制/115
7.1数据更新流程/116
7.2集群数据更新策略/116
7.2.1ANY/120
7.2.2ONE/121
7.2.3QUORUM/121
7.2.4LOCAL_QUORUM/121
7.2.5EACH_QUORUM/121
7.2.6ALL/121
7.3二级索引/122
7.3.1为什么需要二级索引/122
7.3.2Cassandra二级索引更新过程/123
7.4本章小结/124
第8章Cassandra的数据读取机制/125
8.1数据读取流程/126
8.1.1弱读取/126
8.1.2强读取/128
8.2集群数据读取策略/131
8.2.1ONE/132
8.2.2QUORUM/132
8.2.3LOCAL_QUORUM/132
8.2.4EACH_QUORUM/132
8.2.5ALL/133
8.3读修复/133
8.4数据缓存/134
8.4.1RowCache/134
8.4.2KeyCache/134
8.5二级索引/135
8.6本章小结/135
第9章Cassandra的数据压缩机制/137
9.1为什么要进行数据压缩/138
9.2如何控制数据压缩/138
9.3数据压缩流程/139
9.4维护Cassandra中的数据/143
9.4.1数据清理压缩/143
9.4.2数据一致性校验压缩/144
9.5本章小结/144
第10章Cassandra的启动流程/145
10.1Cassandra启动脚本/146
10.2Cassandra启动流程/149
10.2.1配置log4j/150
10.2.2读取校验配置文件信息/150
10.2.3加载所有的数据文件/152
10.2.4修复数据/154
10.2.5启动Gossiper服务/155
10.2.6判断是否需要进行Bootstrap操作/156
10.2.7监听Thrift端口,提供Thrift服务/157
10.3本章小结/157
第11章在分布式环境中使用的Cassandra/159
11.1在Linux环境中搭建与使用Cassandra集群/160
11.1.1配置JRE/160
11.1.2部署Cassandra可执行文件/161
11.1.3修改Cassandra配置文件/162
11.1.4启动Cassandra/163
11.2Cassandra运行配置项详解/166
11.3Cassandra集群的运行和维护/175
11.3.1查看集群的运行情况/176
11.3.2添加节点/179
11.3.3删除节点/181
11.3.4移动节点/183
11.3.5数据维护/185
11.4本章小结/187
第12章Cassandra与Hadoop的整合/189
12.1Hadoop快速入门/190
12.1.1Hadoop简介/190
12.1.2HDFS/192
12.1.3Map/Reduce/192
12.1.4配置单机版Hadoop/194
12.1.5编写Map/Reduce程序/195
12.2为什么要整合Cassandra与Hadoop/200
12.3使用Map/Reduce导入数据到Cassandra中/200
12.4将Cassandra中的数据作为Map/Reduce输入/205
12.5本章小结/209
第13章Cassandra最佳实践/211
13.1避免Cassandra自身的限制/212
13.1.1不要盲目使用Super Column/212
13.1.2硬盘的容量大小限制/212
13.1.3注意系统大小限制/212
13.2数据压缩策略/213
13.3使用高级的客户端/213
13.3.1Pycassa/213
13.3.2Hector/215
13.3.3FluentCassandra/218
13.3.4Cassandra/220
13.3.5phpcassa/221
13.4负载均衡/222
13.4.1随机选取/222
13.4.2缓存集群信息/222
13.5谨慎使用二级索引/223
13.6通过JMX监测Cassandra/223
13.7调整JVM启动参数/229
13.8使用适合的系统配置参数/231
13.9本章小结/232
附录A在Eclipse中修改Cassandra源代码/233
附录BCassSeller代码/243
附录CCassSeller-0.7代码/243
阅读(1590) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~