这是一个超级基本的问题,但它实际上已经困扰了我好几天.有没有一种好方法可以获得COUNT(*)
Cassandra中给定表的等价?
我将把数亿行转移到C*进行一些负载测试,我想在通过网络移动大量数据之前至少获得一些ETL作业的行计数.
我最好的想法是基本上用Python循环遍历每一行并自动递增一个计数器.有没有更好的方法来确定(甚至估计)C*表的行大小?我还在Datastax Ops Center周围寻找,看看我是否可以确定那里的行大小.如果可以,我不知道它是如何可能的.
其他人需要count(*)
在C*中获得一张桌子吗?如果是这样,你怎么去做呢?
我正在尝试使用datastax ops center在cassandra nosql数据库中复制学校项目中的数据.根据我的阅读,有三个关键字:集群,节点和数据中心,根据我的理解,节点中的数据可以复制到另一个集群中的另一个节点中.并且包含相同(重复)数据的所有节点组成数据中心.是对的吗?
如果不是,有什么区别?
到目前为止,我还没有在Datastax文档网站上找到一个总结的地方.我可以在服务器上以其他方式轻松检查版本吗?
在进行批量加载数据时,根据日志数据递增计数器,我遇到了超时异常.我使用Datastax 2.0-rc2 java驱动程序.
这是服务器无法跟上的问题(即服务器端配置问题),还是客户端厌倦等待服务器响应的问题?无论哪种方式,是否有一个简单的配置更改我可以做到这将解决这个问题?
Exception in thread "main" com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency ONE (1 replica were required but only 0 acknowledged the write)
at com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:54)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:271)
at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:187)
at com.datastax.driver.core.Session.execute(Session.java:126)
at jason.Stats.analyseLogMessages(Stats.java:91)
at jason.Stats.main(Stats.java:48)
Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency ONE (1 replica were required but only 0 acknowledged the write)
at com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:54)
at com.datastax.driver.core.Responses$Error.asException(Responses.java:92)
at com.datastax.driver.core.ResultSetFuture$ResponseCallback.onSet(ResultSetFuture.java:122)
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:224)
at com.datastax.driver.core.RequestHandler.onSet(RequestHandler.java:373)
at com.datastax.driver.core.Connection$Dispatcher.messageReceived(Connection.java:510)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296) …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用cassandra配置spring数据.但是当我的应用程序在tomcat中部署时,我收到了轰鸣声错误.
当我检查连接时,它可用于给定端口.(127.0.0.1:9042).我有下面的堆栈跟踪和弹簧配置.有没有人对这个错误有所了解?
完整堆栈跟踪:
2015-12-06 17:46:25 ERROR web.context.ContextLoader:331 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession': Invocation of init method failed; nested exception is com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1:9042 (com.datastax.driver.core.exceptions.InvalidQueryException: unconfigured table schema_keyspaces))
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:736)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:759)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4994)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5492)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:649)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1245)
at …
Run Code Online (Sandbox Code Playgroud) Datastax Cassandra是唯一可用于生产环境的Cassandra吗?有没有免费的替代品?Apache网站上提供的cassandra怎么样?
我正在为Cassandra数据库构建一个备份和恢复过程,以便在需要时准备就绪,以便我了解细节以构建适合生产的东西.我在这里遵循Datastax的说明:
http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_backup_restore_c.html.
首先,我在开发盒上播种数据库,然后尝试进行备份/恢复.这是备份脚本:
#!/bin/bash
cd /opt/apache-cassandra-2.0.9
./bin/nodetool clearsnapshot -t after_seeding makeyourcase
./bin/nodetool snapshot -t after_seeding makeyourcase
cd /var/lib/
tar czf after_seeding.tgz cassandra/data/makeyourcase/*/snapshots/after_seeding
Run Code Online (Sandbox Code Playgroud)
是的,也许,tar不是最有效的方式,但我只是想让一些事情发挥作用.我检查了tar,所有文件都在那里.
备份数据库后,我关闭了Cassandra和我的应用程序,然后rm -rf /var/lib/cassandra/
模拟完全丢失.
现在恢复数据库.从http://www.datastax.com/documentation/cassandra/2.0/cassandra/operations/ops_backup_snapshot_restore_t.html恢复"方法2" 与我的模式创建组件比方法1更兼容.
所以,方法2 /步骤1,"重新创建模式":重新启动Cassandra,然后重新启动我的应用程序.该应用程序构建为在必要时在启动时重新创建架构.一旦它启动,就会有一个工作的Cassandra节点,其中包含应用程序的架构,但没有数据.
方法2 /步骤2"恢复快照":它们提供了三种选择,第一种是使用sstableloader,记录在http://www.datastax.com/documentation/cassandra/2.0/cassandra/tools/toolsBulkloader_t.html.加载器所需的文件夹结构与快照工具创建的文件夹结构完全不同,因此必须将所有内容移动到位.在遇到所有麻烦之前,我会在一张桌子上试一试:
>./bin/sstableloader makeyourcase/users
Error: Could not find or load main class org.apache.cassandra.tools.BulkLoader
Run Code Online (Sandbox Code Playgroud)
嗯,好吧,那不行.BulkLoader位于./lib/apache-cassandra-2.0.9.jar中,但加载器似乎没有设置为开箱即用.让我们继续第二种方法,将快照目录复制到makeyourcase/users/snapshots /目录中,而不是调试工具.这应该很简单,因为我们将快照目录放回原来的位置,所以tar xzf after_seeding.tgz
应该这样做:
cd /var/lib/
tar xzf after_seeding.tgz
chmod -R u+rwx cassandra/data/makeyourcase
Run Code Online (Sandbox Code Playgroud)
并将快照目录放回各自的"快照"目录下,刷新应恢复数据:
cd /opt/apache-cassandra-2.0.9
./bin/nodetool refresh -- makeyourcase users
Run Code Online (Sandbox Code Playgroud)
这没有抱怨.请注意,您必须为每个表运行此操作,因此您必须首先生成表列表.但是,在我们这样做之前,请注意Cassandra日志中有一些有趣的东西:
INFO 14:32:26,319 Loading new SSTables for …
Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的tabe:
CREATE TABLE test (
"type" varchar,
"value" varchar,
PRIMARY KEY(type,value)
);
Run Code Online (Sandbox Code Playgroud)
我在其中插入了5行:
INSERT INTO test(type,value) VALUES('test','tag1')
INSERT INTO test(type,value) VALUES('test','tag2')
INSERT INTO test(type,value) VALUES('test','tag3')
INSERT INTO test(type,value) VALUES('test','tag4')
INSERT INTO test(type,value) VALUES('test','tag5')
Run Code Online (Sandbox Code Playgroud)
我跑了SELECT * from test LIMIT 3
,它按预期工作.
type | value
------+------
test | tag1
test | tag2
test | tag3
Run Code Online (Sandbox Code Playgroud)
当我跑SELECT COUNT(*) from test LIMIT 3
,它产生:
count
-------
5
Run Code Online (Sandbox Code Playgroud)
不应该说3吗?
该Datastax文件似乎表明,指定LIMIT
将覆盖10000默认值.为什么在这种情况下不起作用?如果重要的话,我在Cassandra 2.2.5上并通过cqlsh运行所有查询.
更新
Java驱动程序和CQLSH都经过测试,表明LIMIT
确实无法按照文档中的规定运行.如果有任何Datastax员工阅读,您的意见将非常感谢.
我试图从这里运行以下示例
CREATE TYPE address (
street text,
city text,
zip int
);
CREATE TABLE user_profiles (
login text PRIMARY KEY,
first_name text,
last_name text,
email text,
addresses map<text, address>
);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试创建user_profiles
表时,我收到以下错误:
InvalidRequest: code=2200 [Invalid query] message="Non-frozen collections are not
allowed inside collections: map<text, address>
Run Code Online (Sandbox Code Playgroud)
有关为什么会发生这种情况的任何想法?
我在一台机器上有一个cassandra节点.当我从同一个机器上访问cqlsh时,它可以正常工作.
但当我尝试使用另一台机器上的"192.xxx"连接到它的cqlsh时,我收到一个错误说
连接错误:('无法连接到任何服务器',{'192.xxx':错误(111,"尝试连接到[('192.xxx',9042)].上次错误:连接被拒绝")})
这是什么原因?我该如何解决?