问题标签 [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 回答
663 浏览

java - 如何使用所有四个节点连接到 cassandra 数据库

我最近开始使用 Cassandra 数据库,并且正在使用 Netflix 客户端来填充和读取 Cassandra 数据库中的数据。

我有一个带有四个节点的集群。我已经创建了这样的键空间-

我的专栏家族名称是-profile_columnfamily

这是我的四个节点-

现在我只使用上面的一个节点来连接 Cassandra 数据库并填充数据。但是我的 DBA 说,您需要使用所有四个节点来建立连接。

现在我不确定如何使用所有四个节点使用 Netflix 客户端进行连接?任何人都可以帮助我吗?

谢谢您的帮助。

0 投票
1 回答
2853 浏览

java - Astyanax客户端每个节点的最大连接数?

我正在使用 Astyanax 客户端从 Cassandra 数据库中读取数据。

我在 Cassandra 数据库中有大约一百万个唯一行。我有一个带有四个节点的交叉托管中心集群。

这些是我的四个节点:

我启用了 KeyCaching 并且也启用了 SizeTieredCompaction 策略。

我有一个多线程的客户端程序,它将使用 Astyanax 客户端从 Cassandra 数据库中读取数据,并且我使用 20 个线程运行该程序。如果我用 20 个线程运行我的客户端程序,那么从 Cassandra 数据库读取数据的性能会降低。

因此,我首先想到的是可能存在与 Cassandra 的连接的争用(他们是否使用池,如果有的话,维护了多少连接)?我正在使用以下代码使用 Astyanax 客户端进行连接。

我是否需要对上述代码进行任何更改以提高性能?

这个方法有什么作用?

我需要增加它以提高性能吗?我有四个节点,所以我应该将其更改为 4?

setMaxConns(20) 方法会调用吗?我是否还需要添加它以提高性能?因为我将使用多个线程运行我的程序。

0 投票
1 回答
1782 浏览

java - Astyanax 客户端中的 setMaxConns 和 setMaxConnsPerHost

Astyanax client用来从Cassandra database. 我有一个single cluster. four nodes我有replication factor of 2。我试图了解两者之间有什么区别

Astyanax 客户端中的方法?我找不到关于此的适当文档。

我有一个多线程代码,它产生多个线程,然后只创建一次到 Cassandra 数据库的连接(因为它是一个单例),然后继续重用其他请求。

现在我想了解以上两种方法对读取性能有何影响?应该如何设置这些值?

如果我将上述两种方法设置为-

那是什么意思呢?任何解释都会有很大帮助。

更新代码:-

下面是代码,我用来建立连接 -

如果我正在调试这段代码,它甚至都没有进入BagOfConnectionsConnectionPoolImpl课堂。我在同一个类中放置了很多断点,以查看它是如何使用连接和其他默认参数的。但不知道为什么它没有击中那个类。

0 投票
1 回答
105 浏览

scala - 使用 astyanax 客户端编译 scala 代码时遇到问题

以上是创建一个列族,旨在用作 Cassandra 中的计数器。无论出于何种原因,编译都会失败,原因如下:

0 投票
2 回答
749 浏览

java - 为什么 astyanax (java) 不能在我的 scala 案例类参数列表中识别我的 @Id 注释值?

所以这是我的困境:我有一个域模型,在 scala 中有一堆案例类,例如UserOrganization. 在我的数据访问层(dao、存储库等)中,我使用 astyanax(来自 netflix 的 java 库),它是实体持久化器,用于将对象保存到 cassandra 列族。

这是我的 cassandra/astyanax 支持的 DAO 的一些示例代码(是的,我知道我需要做一些更 scala-ish 的事情,但我仍在学习 =))

getDeclaredAnnotations()在阅读了这个冗长的描述之后,我基本上是想看看为什么当 java 执行时参数列表中的带注释的 val 不起作用Field我不想回去重构所有东西,这样我就可以使用持久化使保存实体(即manager.put(entity))变得非常简单。如果我想继续使用案例类,以便可以使用更多不可变样式的 scala 和Lensscalaz,那么我将不得不更新 DAO 并手动执行所有持久化操作,这真的可以消磨时间。

所以,如果有人知道我没有看到的东西,请告诉我!提前感谢您花时间阅读本文。

场景 1 - 案例类

Astyanax 无法获取注释 @Id onval

场景 2 - 有伴生对象的类或没有伴生对象的类

Astyanax 无法获取 @Id 注释val

场景 3 - 在块内定义了 val 的案例类或类

这很好用,因为它theId被注释为@Id,但我不想这样做,因为IdBaseEntity已经定义了 andid val并且破坏了继承的整个目的并能够传递id给超类

数据访问部分

在经理中你会看到一个电话build()。Astyanax 检查传入的类,withEntityType()在本例中为classOf[Organization]

我的每个场景都失败了,除了#3,当我在类块内声明了一个 val 而不是案例类或带有伴随对象的常规类/常规类的参数列表时。Astyanax 说该类的已知成员带有注释,@Id因此它会引发异常。在我进一步挖掘之前,我想我会向社区询问注释 scala 类并将其发送到进行反射的 java 库的细微差别。来源没什么特别的。实际上,这是失败的相关行:https ://github.com/Netflix/astyanax/blob/master/astyanax-entity-mapper/src/main/java/com/netflix/astyanax/entitystore/EntityMapper.java #L89-120

0 投票
1 回答
2114 浏览

java - Astyanax Cassandra 客户端中的连接池类型

从过去几周开始,我们一直在尝试评估不同的不同Cassandra clients,所以现在看起来我们将继续前进Netflix/Astyanax client

我们正在尝试优化Cassandra database主要针对read performance. 目前,我正在这样创作Astyanax connection-

问题陈述:-

所以默认情况下,我相信Astyanax client会使用ConnectionPoolType as ROUND_ROBIN.

现在我试图read performance从以下选项的角度来理解哪个更好?

TOKEN_AWARE or ROUND_ROBIN or BAG

那这三者有什么区别?以及我们如何决定我们应该使用上述三个中的一个?

关于我们集群的一些背景。我们将与cross colo cluster单身24 nodes。意义12 nodes in SLC colo12 nodes in PHX colo

我们将使用NetworkTopologyStrategywith replication factor of 4,意思是2 in each colo。我们将使用LeveledCompactionStrategy.

对我上述问题的任何解释都会有很大帮助。会有很多人在生产环境中使用 Astyanax 客户端。任何反馈都会有很大帮助。

谢谢您的帮助。

更新:-

仍在寻找可以通过示例向我解释这三个之间的主要区别的答案,以便我更好地理解。我知道这些一般意味着什么,但无法从示例的角度理解它是如何工作的。

0 投票
2 回答
615 浏览

java - astyanax 是否仅支持本地节点的自动发现模式?

我最近开始Cassandra在我们的Production environment. 我们有一个24 node clusterwith replication factor of 4。意义2 copies将在那里each datacenter。所以这意味着我们有一个单一的交叉结肠集群,24 nodes其中12 nodes in SLC colo12 nodes in PHX colo

我正在使用Astyanax client将数据写入Cassandra database. 现在我想弄清楚是否有任何方法Astyanax client能够找出所有nodes in the PHX colo or SLC colo节点而不是所有节点?

在我的setSeeds方法中,我将传递仅与one datacenter. 它将是 SLC 或 PHX。因此,如果您查看我下面的代码,我在我的代码中指定了 2 个节点setSeeds method,所有这些节点都属于PHX colo. 现在我正在尝试启用自动发现模式,但仅适用于那个特定的 colo。因此,在我的情况下,它应该能够检测 PHX colo 的 12 个节点,而不是所有 24 个节点。

下面是我使用ConnectionPoolTypeasTOKEN_AWARE的代码,默认情况下使用NodeDiscoveryTypeas RING_DESCRIBE,它将向我显示24 nodes与两者相对应的所有colos/datacenter内容,这就是我不想要的。我需要拥有与每个 colo/datacenter 对应的所有节点

知道如何使用 Astyanax 客户端实现这种情况吗?这可能吗?

简而言之 - astynanx 是否仅支持本地节点的自动发现?

为什么我问这个是因为 RING_DESCRIBE,它会给我来自两个 colo 的所有节点。所以假设如果我从 PHX colo 运行我的程序,那么它可能会去 SLC colo 获取数据,并且由于我看到非常糟糕的写入性能,因为 PHX 和 SLC 之间的 ping 时间为 15-20 毫秒。

0 投票
2 回答
2670 浏览

java - 在 Astyanax 客户端中 NodeDiscoveryType 作为 TOKEN_AWARE 是什么意思?

我在com.netflix.astyanax.connectionpool.NodeDiscoveryTypeTOKEN_AWARE的 Cassandra 的 Astyanax 客户端中找到了枚举值,并试图了解它的作用?

假设我有 24cross colo cluster个节点,其中 PHX 中有colo/datacenter12 个节点, SLC中有 12 个节点colo/datacenter

我正在使用 Astyanax 客户端连接到 Cassandra,如下所示:

谁能解释一下of和of的TOKEN_AWARE区别NodeDiscoveryTypeTOKEN_AWARE什么ConnectionPoolType

谢谢您的帮助。

更新代码

以下是我在进行更改后使用的代码 -

您在示例中提到您将使用-

这两个在一起对吧?但我相信TOKEN_AWARE ConnectionPoolType默认情况下使用RING_DESCRIBE,所以再次添加它没有意义。我对吗?

如果我错了,请纠正我?

0 投票
1 回答
1903 浏览

java - 使用 Astyanax 客户端的 Cassandra 读取性能

我们正在使用Cassandra database in production environment. 我们有一个single cross colo cluster of 24 nodes意义12 nodes in PHX12 nodes in SLC colo。我们有一个replication factor of 4which 的意思2 copies will be there in each datacenter

以下是我们keyspace的.column familiesProduction DBA's

使用 placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy' 和 strategy_options = {slc:2,phx:2} 创建键空间配置文件;

我们正在运行Cassandra 1.2.2,它也有、org.apache.cassandra.dht.Murmur3Partitionerwith和enabled 。Cassandra 节点部署在SSD 上。KeyCachingSizeTieredCompactionStrategyVirtual NodesHDD instead of

我正在使用从usingAstyanax client读取数据。我在生产集群中插入(在 24 个节点上总共大约 285GB 的数据),在压缩完成后,我开始做.Cassandra databaseconsistency level as ONE50 Millions recordsAstyanax clientread against the Cassandra production database

下面是我使用创建连接配置的代码Astyanax client-

大多数时候我都在95th percentile read performance四处走动8/9/10 ms

我想看看有什么方法可以让我变得更好read performanceCassandra database我的印象是我将获得第 95 个百分位,1 or 2 ms但是在对生产集群进行了一些测试之后,我的所有假设都出错了。我正在运行我的客户端程序的 Cassandra 生产节点的 Ping 时间是0.3ms average.

下面是我得到的结果。

谁能阐明我可以尝试哪些其他方法来实现良好的读取延迟性能?我知道在我的情况下可能有类似的人在生产中使用 Cassandra。任何帮助将不胜感激。

谢谢您的帮助。

0 投票
2 回答
671 浏览

java - Astyanax 的 EntityPersister 和收藏更新

背景

Astyanax 的 Entity Persister 将 Entity 的 Map 保存在多个列中。格式为 mapVariable.key

问题:

当实体中的地图已更新时,astyanax 的实体持久性不会从 cassandra 中删除已删除的键/值对

我现在使用的解决方案(不好的方法)

我正在删除整行,然后重新插入

更多信息

我使用 astyanax 的 Entity Persister (com.netflix.astyanax.entitystore) 将我的 java 对象保存在 cassandra 中。

我注意到的是,当一个实体的映射被持久化时,比如说,2个值:testkey:testvalue & testkey2:testvalue2,下一次同一个实体的映射被一个值持久化(一个键/值对被删除) : testkey:testvalue, testkey2:testvalue2 不会从列族中删除。

因此,作为一种解决方法,我需要删除整行然后重新插入。

我的插入代码:

我错过了什么?这真的是低效的,我认为 astyanax 的实体持久化器应该自己处理这个问题。

有什么想法吗?