问题标签 [pycassa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nosql - Cassandra 数据建模 - 具有日期时间和 UTF8Type 过滤的动态列
我正在寻找创建一个表来存储包含大量网站访问者的 URL 参数详细信息的信息。我正在为每个站点获取每个 user_id-session_id 对的参数和值字典,每个站点都有一个时间戳。
总之:每个站点都有用户(他们有会话),这些用户的参数有时具有值。
我想像这样查询这些数据......
对于每个网站,给定一个日期范围,获取具有一定参数值的客户的customer_id。
ps 我没有用户 ID/会话 ID 的列表,所以我不能在不执行“get_range()”查询的情况下将它们用作行键。这可能很昂贵。
尝试过的解决方案/想法...
我认为动态列在这里会是一个好主意,因为我们并不真正了解所有不同的参数集,我宁愿不尝试对它们进行硬编码。这给了我参数的名称作为列标题和单元格的值作为参数值。这一切都很好,但它给我留下了(站点、日期、客户 ID、会话 ID)的复合行键。
我完全支持大型复合行键,但我认为我(希望得到纠正)不能以这种方式查询数据以获取日期范围。如果是这样,请问我该怎么做?
还考虑过使用 site-datetime 复合列标题,因为它可以让我很好地过滤这些属性。然后我可以将行键作为 (param - param value) 复合键并构建一组 user_ids 作为值。实际上,我认为这听起来是我目前最好的选择,但它仍然看起来相当混乱。
如果有人有任何想法,我很想听听他们的意见!
谢谢,
马特
pps 我正在使用 Pycassa、CQL3 和 Cassandra 1.2,所以我拥有这些平台提供的所有工具
python - Cassandra 和 Pycassa:确定是否存在具有特定键的行的最佳方法
使用 pycassa,确定是否存在具有特定键的记录的最佳方法是什么?这是
是一个好的解决方案吗?这会只使用密钥缓存吗?
更新:我刚刚尝试了这个查询,pycassa.NotFoundException
如果columns=[]
指定它总是会引发。
cassandra - Pycassa 和 Cassandra:仅基于列进行选择
我对这两种技术都是新手,我正在尝试执行以下操作:
- select * from mytable where column = "col1" or column="col2"
到目前为止,文档说我应该通过以下方式使用 get 方法:
但我没有行 ID。我将如何运行上述查询?
谢谢
cassandra - Cassandra 1.2:CQL 优于基于 Thrift 的客户端
我终于掌握了 Cassandra 的窍门,部分问题是学习/尊重 Thrift 和 CQL3 之间的差异。
我在网上找到的许多教程都是针对 CQL3 的。我的问题:CQL3 真的是首选方法吗,Thrift 是否被劝阻?我问的原因是我花了几天时间试图通过不支持 Cassandra 1.2 并且基于 Thrift 模型的 Pycassa 获得我需要的东西。
cassandra - 创建密钥空间时出错 - cassandra
使用 cassandra cli 创建数据库时,出现以下错误。知道我在这里做错了什么吗?下面列出了更多详细信息:
当我再次执行相同的命令时,异常变为
输出 - org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe
仅供参考,我正在使用 cassandra 2.0.1
谢谢你。
python - 使用 pycassa 插入复合行键
警告我是一个pycassa noobie:
我正在尝试使用 pycassa 保存一些数据,如下所示:
这会在 cassandra 上产生以下结果:
但我需要的是:
这是我的列族的定义:
有谁知道我怎么能做到这一点?
cassandra - 插入后的意外值
我有一个用 python 编写的脚本,应该更新 Cassandra 中的计数器。它就像一个批纠正计数器。
脚本所做的是:获取应该在数据库中的真实值,获取在数据库中持久保存的当前值,计算值之间的差异,最后将插入命令发送到传递差异的特定行键以更新计数器。
一切正常。我得到了正确的值和差异,但是在插入命令之后,行键的值不是预期的。
我发送了通过 diff=5000 的插入命令,因此预期的新 DB 值应该是 35000。但有时新的 DB 值是一个疯狂的负数,例如 -360.000。这没有任何意义,因为没有任何值和运算符的组合可以产生这样的值。
而且,如果我再次运行脚本,最终的持久值是正确的。如果我稍后再试一次,最终的持久值再次出现错误......
谁能帮我这个 ?相同的脚本有时可以正常工作,有时会保持疯狂的价值。
谢谢 !
python-2.7 - 使用多线程 pycassa xget() 调用实现对 cassandra 宽列族的基于范围的查询时,性能会变差吗?
我有一个典型的宽列族,其中包含 {rowkey--> uuid4+date 和时间序列数据作为列},我在其上使用 pycassa xget() 调用实现了基于范围的查询。并不是说我受到单线程代码性能不佳的困扰,我更想了解当 xget() 调用是并行而不是顺序(从 for: 循环内部)进行时性能的差异。
我使用“线程”python 库来实现基于范围的查询的多线程版本,性能实际上大大降低。现在我知道 python GIL 对多线程代码的影响,但是有什么方法可以确定这实际上是由 GIL 引起的吗?可能是其他原因造成的吗?
提前致谢。
注意:我没有考虑“多处理”库,因为我无法为每个子进程使用不同的 ConnectionPool 对象。
python - 为 Cassandra 选择 python 客户端库
我之前使用过 Pycassa 并编写了一个包装器来使用批量突变和连接池等。但是http://wiki.apache.org/cassandra/ClientOptions现在建议使用基于 CQL 3 的 api,因为基于 Thrift 的 api (Pycassa) 将是仅支持向后兼容。Apache 站点建议使用由 DataStax 编写的 Python api,它仍处于 Beta 阶段(根据他们的文档)。从他们的 python-driver/README.rst 文件中查看警告
警告
此驱动程序目前正在大力开发中,因此包、模块、类和函数的 API 和布局可能会发生变化。也可能存在严重的bug,所以暂时不建议在生产环境中使用。
DataStax 站点http://www.datastax.com/download/clientdrivers建议使用 DB-API 2.0 和旧版 api。还有更多吗?有没有人比较基于 CQL 3 的 API?哪个脱颖而出?基于事实的答案将对社区有所帮助,因此请不要发表意见。
cassandra - 使用 multiget 从 Cassandra 读取数据时出现 MaximumRetryException
我在一个宽列中插入带有时间戳 (T) 的时间序列数据作为列名,该列在一行中存储 24 小时的数据。流数据从数据生成器(4 个实例,每个实例有 256 个线程)写入,将数据并行插入到多行中。
CF2(宽列系列):
RowKey1 (T1, V1) (T2, V3) (T4, V4) ......
RowKey2 (T1, V1) (T3, V3) .....
:
:
我现在正在尝试使用 multiget 从 Cassandra 读取这些数据。客户端是用python编写的,使用pycassa。
当我为单个行键查询 24 小时价值数据时,会返回超过 200 万个数据点。在使用 multiget 并行 4 个行键时,我收到以下错误:
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\columnfamily.py”,第 772 行,在 multiget packed_keys[offset:offset + buffer_size], cp, sp,一致性)
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 576 行,执行 return getattr(conn, f)(*args, **kwargs)
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 153 行,在 new_f 返回 new_f(self, *args, **kwargs )
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 153 行,在 new_f 返回 new_f(self, *args, **kwargs )
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 153 行,在 new_f 返回 new_f(self, *args, **kwargs ) 文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 153 行,在 new_f 返回 new_f(self, *args, **夸格斯)
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 153 行,在 new_f 返回 new_f(self, *args, **kwargs )
文件“c:\Python27-64bit\lib\site-packages\pycassa-1.9.1-py2.7.egg\pycassa\pool.py”,第 148 行,在 new_f (self._retry_count, exc. class ._ name _, exc)) pycassa.pool.MaximumRetryException:重试 6 次。上次失败超时:超时
但是,以前我能够并行获取 256 个行键的数据。现在,我增加了数据的密度(即在一个时间范围内没有 .of 数据点)并且查询因这个问题而失败。
我们在 multiget 中调整了 buffer_size,发现 8 是最佳选择。
堆大小:6GB
内存:16GB
读取一致性:一个
集群:5节点
CPU 利用率低于 20%。此外,我没有看到 OpsCenter 报告的读取吞吐量、读取延迟、磁盘吞吐量和磁盘延迟有任何异常模式。
我还尝试将 Cassandra.yaml 中的 read_request_timeout_in_ms 增加到 60000 但徒劳无功。关于我们为什么会收到此异常的任何其他指示?我希望查询花费大量时间来检索结果,但仍然不会失败。
谢谢,
VS