问题标签 [astyanax]

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.

0 投票
1 回答
2511 浏览

java - 使用 Astyanax CQL3 API 批量插入?

我知道我们可以使用类似这样的方式将单个记录插入 Cassandra(以下示例取自此处):

是否可以使用 Astyanax 的 cql3 API(如 JDBC 的 executeBatch)进行批量插入(用于多条记录)?

注意:使用 Astyanax 的 MutationBatch(基于 Thrift,而不是 CQL)对我来说似乎不是一种选择,因为我遇到了与这个相同的问题。

0 投票
2 回答
2018 浏览

java - 如何使用 Astyanax 进行 Cassandra CQL 查询?

我正在使用 Astyanax 版本 1.56.26 和 Cassandra 版本 1.2.2

好的,一些情况概述:

  1. 我使用 cqlsh 创建了一个非常简单的列族,如下所示:

    CREATE TABLE users ( name text PRIMARY KEY, age int, weight int );

  2. 我填充了列族(没有空列)

  3. users通过 cqlsh查询产生预期结果

  4. 现在我想以编程方式查询users,所以我尝试类似:

  1. 在分配weightNPE 的过程中被抛出!:(

我的理解是应该包含与包含作为其行键result的行关联的所有列。"bobbydigital"然后我尝试将名为的列中的值分配给"weight"整数变量weight。我知道该变量columns正在被分配,因为当我在分配后立即添加一些调试代码时,如下所示:

我得到以下输出:

Column names = [, age, weight]

那么为什么是空指针呢?有人能告诉我哪里出错了吗?另外,为什么有空白列名?

更新:
另外,如果我尝试以不同的方式查询,如下所示:

我得到以下异常:
InvalidRequestException(why:Not enough bytes to read value of component 0)

提前感谢您提供的任何帮助!

0 投票
2 回答
627 浏览

cassandra - 无法获取 Astyanax IndexQuery 执行的所有结果

我正在使用 Astyanax 客户端从 Cassandra 列族中读取数据。我的要求是通过 astyanax 查询列族的二级索引列。我能够从 astyanax 网站上找到一些示例,以使用索引列上的表达式从 Cassandra 读取数据。我使用示例编写了自己的代码:

这是我在运行此代码时面临的问题,它只返回 100 行,而列族有几千行满足查询条件。

我无法找到正确的 API/模式来解决我的问题。有人可以指导我解决这个问题吗?

Astanax 版本:1.56.24 Apache Cassandra 版本:1.1.8 Jdk 版本:1.7 平台:Rhel 5.4 32bit

0 投票
2 回答
429 浏览

java - astyanax 可以返回有序的列名吗?

使用 com.netflix.astyanax,我为给定行添加条目,如下所示:

后来我检索了我的所有列:

以下正确返回了我添加的所有列,但这些列没有按照它们在数据库中输入的时间进行排序。由于每列都有与之关联的时间戳,因此应该有一种方法可以做到这一点,但我没有看到。在那儿?

注意:如果没有,我可以随时将上面的代码更改为:

然后检索列值,对它们进行相应的排序,但这似乎很麻烦、效率低下和愚蠢,因为每列都已经有一个时间戳。

0 投票
1 回答
142 浏览

java - 在声明 cassandra 系列时指定 column_metadata 总是一个好主意吗?

我知道 column_metadata 可用于为任何列提供配置,但通常情况下,我不需要特定于列的配置。在这种情况下,创建家庭时使用 column_metadata 有什么好处吗?

具体来说,写作有什么好处:

代替

0 投票
1 回答
2742 浏览

java - Cassandra 更新无法始终如一地工作

我在本地(mac)机器和远程 unix 服务器上运行以下代码:

在本地,该行永远不会执行,这是有道理的:

但该行在我的开发服务器上执行:

[错误] [main] [nowsdSessionDaoCassandraImpl] [2013-03-08 13:12:24,801] [] - 值 3 应该从列表中删除 [3, 2, 1, 0, 7, 6, 5, 4, 9, 8] 但不是:[3, 2, 1, 0, 7, 6, 5, 4, 9, 8]

  • 我正在使用 com.netflix.astyanax
  • 我的本地机器和远程开发服务器都连接到同一个 cassandra 实例。
  • 我的本地机器和远程开发服务器都运行相同的测试,创建一个新的行族,并在删除一条记录之前添加 10 条记录。
  • 当dev发生错误时,log.error("无法删除位置" + value, e); 没有被执行(即运行删除命令没有产生任何异常)。
  • 我 100% 肯定,当我在 dev 上运行测试时,没有其他代码影响数据库的内容,所以这不是什么奇怪的并发问题。

什么可以解释 deleteColumn(value) 请求运行时没有产生任何错误但仍然没有从数据库中删除列?

附加信息

这是我创建键空间的方式:

以下是我创建列族值的方法,在上面的代码中引用为 VALUES_CF:

以下是上面 java 代码中引用的键空间的定义方式:

其中 getBuilder 是:

第二次更新

  • 首先,这些问题不仅仅与删除有关。我在更新数据库中的记录时观察到类似的问题,读取它们,并且无法读取我刚刚编写的更新

  • 其次,我创建了一个执行 100 次以下操作的测试:

    • 将一行写入 cassandra
    • 在 cassandra 中更新该行
    • 从 cassandra 读回该行并检查该行是否确实已更新,如果没有,则在延迟后定期再次检查

    我从该测试中观察到的是:

    • 同样,当我在本地运行该代码时,所有 100 次迭代都会立即通过(无需重试)
    • 当我在远程服务器上运行该代码时,一些迭代通过,一些失败。当它们失败时,无论延迟有多大(我最多等待 10 秒),测试总是失败。

在这一点上,我真的不确定任何 cassandra 设置如何解释这种行为,因为我连接到同一台服务器进行测试,并且由于我插入的延迟远大于连接时运行测试可能需要的任何额外延迟从我的本地机器。

唯一相关的区别似乎是代码在哪台机器上运行。

第三次更新

如果在之前更新中提到的测试中,我在 2 次写入之间插入了延迟,如果延迟 >= 1,000 毫秒,则代码开始通过。比如说,100 毫秒的延迟没有帮助。我还修改了构建器,将默认的读写一致性设置为最苛刻的:ALL,这对测试结果没有影响(大约一半的时间仍然失败,除非写入之间的延迟>1s):

0 投票
1 回答
1059 浏览

cassandra - 如何使用 astyanax 和复合列在 cassandra 中执行范围查询

我正在使用 cassandra 和 astyanax 开发一个博客。当然,这只是一个练习。

我以这种方式对 CF_POST_INFO 列族进行了建模:

并以这种方式保存帖子:

这个想法是有一些像一段时间桶一样的行(例如,每月或每年一行)。

现在,例如,如果我想获得最后 5 个帖子,我该如何进行愤怒查询?我可以根据帖子 ID (UUID) 执行愤怒查询,但如果不执行另一个查询来获取它们,我不知道可用的帖子 ID。这里的 cassandra 最佳实践是什么?

当然,欢迎任何关于数据模型的建议,我是 cassandra 的新手。

0 投票
2 回答
4341 浏览

astyanax - Astyanax:抛出此异常的简单写入:没有足够的字节来读取组件的值

我是 astyanax 的新手,尝试了一些示例程序并收到此错误。这是一个简单的写法,看起来我在做一些基本错误的事情。不使用复合键。

这是代码:

这是表格描述:

0 投票
2 回答
492 浏览

cassandra - Astyanax:如果 MutationBatch 中途失败,我有什么保证?

我知道从 0.8 开始,Cassandra 保证行更新是原子的。

但是,如果我准备(使用 MutationBatch)几个行修改或跨多个列族的修改,是否保证行将按照我设置它们的顺序更新?例如,如果我有

  • 更新 CF 1,第 1 行
  • 更新 CF 1,第 2 行
  • 更新 CF 2,第 3 行

CF 2 是否可以更新,而 CF 1 由于故障而保持不变?

如果我设置了会发生什么:

  • 更新 CF 1,第 1 行,A 列
  • 更新 CF 1,第 2 行
  • 更新 CF 2,第 3 行
  • 更新 CF 1,第 1 行,B 列

或者,我应该准备三个 MutationBatches 并分别执行它们吗?

0 投票
3 回答
909 浏览

cassandra - 使用 Astyanax 查询带有前缀的列不起作用

我有一个方案如下:

  • 时间戳
  • 设备编号
  • 设备名称
  • 设备所有者
  • 设备位置

我使用 CQL 创建了这个列族,并将主键定义为(TimeStamp,Device ID, Device Name). 通过一个可序列化的对象,该对象具有 DeviceID、名称和字段名称(存储Device OwnerDevice Location)的字段。我使用 Astyanax 插入了一些记录。

根据我的理解,一行的列是通过组合创建的Device IDDevice Name字段名称作为列名称,值是该特定字段的值。因此,对于特定的时间戳和设备,列名将采用 pattern (Device ID:Device Name: ...)

所以我相信我们可以使用这两个字段作为前缀来获取特定时间设备组合的所有条目。

我正在使用以下查询来获取结果:

但是在执行上述查询时,我得到以下异常:

BadRequestException:[主机=本地主机(127.0.0.1):9160,延迟=6(6),尝试=1]InvalidRequestException(为什么:没有足够的字节来读取组件0的值)

@abhi 我在这个列族中可以拥有的数据如下:

我为此使用的 java 可序列化 java 类是:

按照上述类的结构,我可以将列族中的列视为: 列名:dev\:01\:02:1:location 列值:00000001

仅供参考,使用 astyanax 1.56.31