`
longzhun
  • 浏览: 370292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
前提cassandra的根据分区key的操作是很快的,这也是它的优势,但是它的多条件查询是很弱的,特别是如果你有删除操作的话,就更坑爹了。cassandra的删除操作,实际上并不是真的删除,它是执行的插入操作,插入的数据叫做tombs ...
Cassandra使用一个类似于日志结构的结合树(Log-Structured Merge Tree)的存储结构,不像传统关系数据库那样使用B-Tree。 Cassandra会避免在写之前去读。 “写前读”(Read-before-write), 特别是在一个大的分布式系统里,会对读性能产生影响,还会带来其它问题,比如,两个客户端同时去读,其中一个去更新该行的A列,另外一个去更新该行的B列,就可能把对A列的更新覆盖掉。“写前读”,也会破坏cache,增加IO。 为了避免“写前读”的情况,cassandra的存储引擎会对即将要进行的插入、更新进行整理,只会按顺序,以追加的模式仅写入这一行更 ...
在低流量的间隔,防火墙的设置会把长时间闲置的链接关闭,导致本地节点和其它datacenter的节点之间失去联系。链接闲置超时时间一般被网络管理员设置为60分钟。 所以Cassandra在创建双中心的时候,中间传输数据会经常超时,如果你不设置系统的keepalive的话。 配置系统的keepalive,首先通过 sysctl -A | grep net.ipv4 查看系统内核参数: net.ipv4.tcp_keepalive_time:链接闲置多久之后开始探测链接(秒),也可以理解为keepalive发送第一个请求的间隔时间。
Cassandra一个节点的磁盘坏了,分两种情况,一种是节点还可以正常启动。另外一种是节点无法启动。 第一种情况:节点还可以正常启动 1、把坏的盘换掉,如果你没有新的盘去更换,你可以在cassandra.yaml里直接把坏的盘注释掉 2、启动cassandra,如果启动的过程中报错,说找不到keyspace之类的,那你应该使用第二种情况的解决方案。 3、使用nodetool repair修复该节点丢失的数据。 第二种情况:节点无法正常启动
Cassandra的写操作包含几个过程。从开始实时写日志到最后进行压缩。 1、把数据写入commit log2、数据写入内存表memtable3、从memtable中刷新4、存储到磁盘中的sstables里5、压缩 写日志和memtable存储 当有一个写入发生,cassandra会把数据存到内存里叫memtable的数据结构里,也会写到磁盘的commitlog里,提供持久化存储。commitlog接受每个请求,并且持久化保存,甚至是断电。memtable是一种回写cache,cassandra通过key可以在memtbale里查询数据。memtable的大小是有限制的,当到达一个限制 ...
什么时候使用一个索引 cassandra的内建索引适合这样一个表,它有好多列都包含这个索引列的值。这个索引列有更多的值,你的开销越大,主要是对查询和维护索引。例如假设你有一个播放列表的表里面有数十亿首歌曲。很多歌曲可能有共同的艺术家。这个艺术家的列就比较适合作为索引。 什么情况不适合使用索引 不要在以下情况使用索引: 这列的值很多的情况下,因为你相当于查询了一个很多条记录,得到一个很小的结果。
cassandra的索引查询和排序 cassandra的查询虽然很弱,但是它也是支持索引和排序的,当然是简陋的查询,这一切都是为了追求性能的代价,所以要使用cassandra,你不能希望它完全适用你的逻辑,而是把你的逻辑设计的更适合cassandra。 第一:索引查询cassandra是支持创建二级索引的,索引可以创建在除了第一个主键之外所有的列上,当然有些类型除外,例如集合类型。例如 CREATE TABLE test( a INT, b INT, c INT, d INT, e INT, m INT, PRIMARY KEY(a,b,c)); C ...
cassandra集群可能有好多机器,这么多机器肯定有宕机的几率,而且机器越多,几率越大,当发生宕机的时候,你如何删除一个节点呢? 本文仅适应使用了vnodes的cassandra集群,怎么判断是否用了vnodes呢? 主要看你的cassandra.yml配置文件中,是否配置了initial_token,如果没有配置,就是使用了vnodes。使用了vnodes,删除了节点之后它会自己均衡数据,不要你手动处理。 根据官方文档的提示,操作步骤如下: 第一步:先每个机器都修复下每个keyspacenodetool repair -h ip_address_of_node keyspace_n ...
适应于cassandra2.0以上的版本 1、首先修改配置文件 cassandra.yaml 把默认的authenticator: AllowAllAuthenticator运行所有人登录设置为用密码登录: authenticator: PasswordAuthenticator 2、登录cassandra创建用户 使用默认账户登录cassandra 在bin目录下执行 ./cqlsh -ucassandra -pcassandra
本文介绍cassandra支持的,目前我所知道的所有查询表达式类型。如果你需要更复杂的查询,单单依靠cassandra是很难做到的,你需要借助其它手段或者工具。cassandra目前支持的表达式目前有三种:我们先假设我们的表结构是这样的:   CREATE TABLE test( a INT, b INT, c INT, d INT, e INT, PRIMARY KEY(a,b,c,d) ); CREATE INDEX ON test(e);  1、前缀表达式   就是查询条件必须是主键,且前面的主键是=号,只有最后一个主键是> >= < < ...
cassandra的集群对时间的要求是很严格的,在集群中的任何一台机器时间都必须保持同步,即便有一秒的延迟,也会带来莫名其妙的问题。因为cassandra是根据时间戳分辨出最后到达的响应,假设对同一个记录进行不同的操作,如果时间不同步,可能会导致前面的操作在后面的操作之后生效。当在高速操作的时候,可能会发生记录删除不掉,表drop了仍然存在等等奇怪的现象。 同时如果发生这些形形色色的奇怪问题,你应该首先查一下你的集群是否时间同步,假设真是时间不同步导致的,而你又没发现,这会浪费你好多时间去调查原因。 做时间同步可以是集群里的所有机器和同一个时钟同步服务器同步,也可以集群中的某一个机器作为 ...
举例: create table test( a int, b list<text>, c set<text>, d map<text,text>, primary key(a) );  插入使用下面的形式 insert into test(a,b,c,d) values(1,[‘listtext1′,’listtext2’],{‘settext1′,’settext2’},{‘mapkey1′:’mapvale2′,’mapkey2′:’mapvalue2’}); 第一: list类型增加元素:update test ...
cassandra的nodetool工具使用jdk的jmx和cassandra节点通信。nodetool是集群的重要管理工具。 在cassandra2.0版本中,nodetool默认是允许远程访问,其不需要密码的。在cassandra2.1版本中,nodetool默认是只允许本机访问,很不方便,如果远程访问功能打开,又不安全,防止别人乱操作,好方法就是加上访问权限控制。 第一步:打开远程访问权限编辑conf/cassandra-env.sh文件。找到:LOCAL_JMX=yes 默认值监听localhost,只允许本机访问。改为LOCAL_JMX=no 表示远程也可以访问。 第二步:指 ...
本文用到的cassandra的版本是2.0.6版 1、前提和约束 CREATE TABLE test(a INT,b INT,c INT, d string,e string,PRIMARY KEY(a,b,c)); CREATE INDEX ON test(d);  cassandra的查询具有以下约束: 第一主键 只能用=号查询第二主键 支持= > < >= <= 但是必须后面加 ALLOW FILTERING索引列 只支持=号 2、分页查询首先使用limit 关键字来限制查询结果的条数 进行分页。进行翻页是个比较复杂的过程。需要明确查询出来的结果是按 ...
cassandra使用cql语言作为操作语言,cassandra在2.0之后,在操作上越来越像sql数据库的操作,这样想从传统关系型数据库,切换到cassandra的花,上手成本也越来越低。使用官方java驱动操作cassandra 非常简单。 maven引入驱动包   <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>2.0.1</ ...
Global site tag (gtag.js) - Google Analytics