摘要:当启动一个Cassandra集群的时候,必须选择如何在集群中的不同节点之间划分数据。这是由Cassandra的partitioner来完成的。 在Cassandra中,Cassandra所管理的数据构成了一个环。这个环根据节点的数量划分成相等的区间,这样一个节点就可以负责存储一个区间或者几个区间中的数据。在一个节点能够加入到环中之前,它必须被分配一个token(中文翻译为令牌)。token决定了节点在环中的位置,从而也决定过了节点负责管理的数据范围。 数据根据行键(row key)被划分到不同的节点上。为了确定第一个复本所在的节点,需要在换上顺时针的查找,直到找到一个token的值大于等于行键
阅读全文
摘要:前些日子有同学问如何生成token,原来做Voldemort的时候,官方提供了一个脚本,自动生成,Voldemort只是一致性hash很方便,考虑的因素也少。而Cassandra考虑的就多了,跨机架,跨数据中心,都有很多需要注意的。上次我说了在同一个数据中心很实用,可控的方法。下面讲讲DataStax推荐的一些方法。 【正文开始】 Token是为数据中心中某一特定节点分配某一范围的数据的依据。 当启动一个Cassandra的集群,必须选择数据在集群中节点是如何分布的。partitioner是根据数据的key来决定这行数据存储在哪个节点上。token是独立与partitioner的。每一个节点都
阅读全文
摘要:Cassandra的读写请求,主要包括两部分,client端如何找到节点,请求何时成功返回,以及本地的读写是如何完成的,本地的读写,会在后续的博客中不断给出。本文主要解析前面两个问题。 【正文开始】 Cassandra集群中的所有节点都是对等的。客户端的读写请求可能会发送给集群中的任一节点。当客户端连接了某一个节点,并且开始发送读写请求,那个这个节点因为承担了客户端的操作,就被称为“协调者”。 协调者的工作是充当客户端应用和存储实际请求数据的节点之间的代理。协调者根据数据划分、复制的策略来决定,将实际的读写请求发送到确定的节点。 写请求 协调者会将些请求发送到所有应该存储这条数据的节点(也就是
阅读全文
摘要:这是一篇Jonathan Ellis写的文章,与DynamoDB进行比较,突出Cassandra的优点,但似乎后面的评论,大家并不那么接收Cassandra,尤其是在云主机的环境下。原文在这儿。这篇文章就不详细的翻译了,因为有很多的废话,捡重要的说吧。 Cassandra和DynamoDB有什么关系呢?按照文章的说法儿,这简直就是一个轮回。Cassandra最初的实现,很大程度上借鉴了Dynamo那篇论文的实现。但是数据存储模型等并没有采用。今年,Amazon推出DynamoDB,除了Dynamo基础之外,更是从Cassandra学习了很多内容。很有意思。以至于作者最后开玩笑说,Cassand
阅读全文
摘要:一年的时间很快就过去了,这一年,工作上好像只是围绕这Cassandra。前面也写了不少文章,不过都比较浅,原因种种。从明天开始,我除了翻译一些Cassandra的文章之外,还要把这一年的所得逐渐写出来。和大家分享,讨论,也为Cassandra在国内推广,出点力。尽管不如Hbase那般火热,但是我仍旧十分看好Cassandra。尤其是1.0版本以后的发展,越来越给力。 这篇博客主要列出以后会写的一些点。如果不列出来,不强迫自己,恐怕拖一拖就过去了,对自己对后来搞Cassandra的同学,都不好。所以,我要先列出来:SizeTired Compaction的改进——主要效果会提升读性能【done】
阅读全文
摘要:Cassandra使用叫做Gossip的协议发现集群中其他节点的位置和状态信息。Gossip是一个点对点的通信协议,节点之间会周期进行状态信息交换——这些信息包括当前节点本身信息,以及当前节点存储的其他节点的状态信息。 在Cassandra中,gossip进程每秒钟都会和集群中的其他三个节点交换状态消息。状态信息包括节点自身的信息、以及所存储的其他节点的信息,这样集群中的节点,很快就能够互相了解。gossip消息都有一个版本信息,随着交换的进行,旧的信息会逐渐被旧的信息覆盖。 集群成员和种子节点 当节点第一次启动,它会从配置文件中确定所属Cassandra集群的名字,以及确定seeds nod
阅读全文
摘要:下面,我会尝试翻译一些文章,不会十分按照原文,会加入自己的理解。有不恰当的地方,请大家指正。【正文】 Leveled Compaction策略是1.0版本提出的,主要为了在某些场合克服SizeTiered Compaction策略的缺点。不过很不幸,什么时机选择适用Leveled Compaction策略,并不是那么明朗。下面的内容会给出一些选择Compaction策略的指导建议。 SizeTiered Compaction策略与Leveled Compaction策略的不同 Leveled Compaction有一个基本的特征,可以帮助开发人员确定它是否适合:为了保障,一行数据不会分布在更多
阅读全文
摘要:国内研究使用Cassandra的似乎并不多,远没有Hbase那般火热。偏巧,我就在这块儿并不火热的地方,耕耘了一年多。这一年,有深入研究,有实际运维。我打算把这些东西总结出来(前面也写了一些),希望对后来使用的同学有帮助。而且,我坚信,使用Cassandra的团队会越来越多。这篇博客我来解释以下SizeTiered策略,这是一个Cassandra1.0之前的比较简单的Compaction策略。我之前的博客有粗略讲过leveled策略(后面会找时间丰富以下)。SizeTiered策略比较简单,可是尽管简单,如果不深入代码,在实际运维的时候,还是会出现异常现象而无法解释,找不到解决办法。SizeT
阅读全文
摘要:前几天,发了一条围脖,咨询大家python中文分词的库,受到了一些反馈,自己google了一下,收集了一些,集中在这里,和大家分享,如果有别的,也希望大家告诉我。 http://opensource.plurk.com/Loso_Chinese_Segmentation_System/ http://code.google.com/p/smallseg/ http://code.google.co...
阅读全文
摘要:前些天在微博上有一道逆天的幼儿园题目,如下图: 围脖上有很多人猜测答案,更有趣的是,很多人提出用机器学习的方法解决。很有趣,也符合我学习的方法,这样,更有利于学习。遂决定尝试一下。 代码如下:#!/usr/bin/python#-*- encoding: utf-8 -*- '''Created on 2012-6-22@author: zhangcheng'''from numpy import loadtxt, zeros, ones, array, mean, stddef feature_normalize(X): mean_r = []
阅读全文
摘要:本来是写了一条微博,可是心里总是有点不踏实,还是在这里写写,留个纪念。微博写多了,博客就少了,这个不太好。这篇博客是对之前做的社交圈子挖掘方面尝试的总结,这个工作并没有深入太多。因为没有实际需求的驱动,没有做深。不过还是有些心得,记录下来,以后捡起来也方便,或者最好的情况,可以对后面的同学有些启发。 社交圈子挖掘,这里的圈子主要有两种:线下真实的朋友圈子(不用诧异,真的就是如此)还有兴趣导向的“圈子”为什么会有两种不同的呢?因为微博具备这两个特点,在国内,微博不仅仅是一个社交媒体,而且也是一个sns社区。这就产生了这两种不同的圈子,sns的特性,似乎在腾讯微博更加显著。这两类圈子都很有用,对于
阅读全文