我阅读了很多 cassandra 文档,我知道我们有分区键,该键的哈希值用于在分区之间分割数据,以在节点之间均匀分配数据。
但是分区到底是什么?它是一个表,还是表中的某个子集,还是只是用于对节点上的行进行排序的另一种计算内容?它是一个纯粹的虚拟事物,还是一些会产生一些开销的真实实体?
限制分区数量是否更好?例如,我可以从 uuid 除法中取余数并将其用作分区键,这样仍然可以均衡分区之间的数据,但保持分区数较低,或者我可以只使用整个 uuid?
我阅读了很多 cassandra 文档,我知道我们有分区键,该键的哈希值用于在分区之间分割数据,以在节点之间均匀分配数据。
但是分区到底是什么?它是一个表,还是表中的某个子集,还是只是用于对节点上的行进行排序的另一种计算内容?它是一个纯粹的虚拟事物,还是一些会产生一些开销的真实实体?
限制分区数量是否更好?例如,我可以从 uuid 除法中取余数并将其用作分区键,这样仍然可以均衡分区之间的数据,但保持分区数较低,或者我可以只使用整个 uuid?
我尝试根据 Cassandra 查询语言 (CQL) 识别引擎(Cassandra、Scylla、AstraDB、CosmosDB、Yugabyte 等)。我专注于表system.local和system.peers,请参阅示例:
SELECT release_version FROM system.local;
和
SELECT release_version FROM system.peers;
但我没有得到有关系统/引擎的相关信息。你解决了这个问题吗?
cassandra java 驱动程序 4.17 是否与 jdk 21 兼容?我们计划将服务器迁移到 java 21,并且我们正在使用 cassandra 客户端。如果不支持,这对我们来说是行不通的。
提供商方面存在一些混合信号。在兼容性部分: https://docs.datastax.com/en/developer/java-driver/4.17/index.html 指出驱动程序需要 Java 8 或更高版本。
但是在升级指南页面: https ://docs.datastax.com/en/developer/java-driver/4.17/upgrade_guide/index.html 我们有信息表明对 Java17 有 beta 支持。
我已经尝试针对 jdk 21 运行 cassandra java driver 4.17,它似乎可以工作。但我想知道在生产中使用该配置是否安全。
我已经使用 Homebrew 在 macOS Sonoma 上安装了 Astra DB
brew install datastax/astra-cli/astra-cli
我现在正在运行astra setup
但出现以下错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: jdk.internal.io.JdkConsoleImpl.echo(Z)Z [symbol: Java_jdk_internal_io_JdkConsoleImpl_echo or Java_jdk_internal_io_JdkConsoleImpl_echo__Z]
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.access.JNINativeLinkage.getOrFindEntryPoint(JNINativeLinkage.java:152)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.jni.JNIGeneratedMethodSupport.nativeCallAddress(JNIGeneratedMethodSupport.java:54)
at [email protected]/jdk.internal.io.JdkConsoleImpl.echo(Native Method)
at [email protected]/jdk.internal.io.JdkConsoleImpl.readPassword(JdkConsoleImpl.java:101)
at [email protected]/java.io.ProxyingConsole.readPassword(ProxyingConsole.java:117)
at com.dtsx.astra.cli.config.SetupCmd.execute(SetupCmd.java:75)
at com.dtsx.astra.cli.core.AbstractCmd.run(AbstractCmd.java:89)
at com.dtsx.astra.cli.AstraCli.run(AstraCli.java:280)
at com.dtsx.astra.cli.AstraCli.main(AstraCli.java:255)
at [email protected]/java.lang.invoke.LambdaForm$DMH/sa346b79c.invokeStaticInit(LambdaForm$DMH)
考虑下表,分区键的顺序重要a
吗b
?
CREATE TABLE t (
a varchar,
b int,
c text,
PRIMARY KEY ((a,b))
);
如果a
有更多独特元素,它应该放在第一个位置还是最后一个位置?
我是 Cassandra 的新手,在尝试弄清楚如何订购数据时遇到了困难。我正在尝试为每个主播录制来自 twitch.tv 的消息。我想要类似下面的东西
CREATE TABLE IF NOT EXISTS chat_data.twitch_chat_by_broadcaster_and_timestamp (
broadcaster_id int,
timestamp int,
message text,
PRIMARY KEY (broadcaster_id, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC);
虽然对于业余爱好项目来说这不是问题,但如何解决同时发送两条消息的问题。我知道TimeUUID
,但我希望消息按发送时的时间戳排序,而且看起来TimeUUID
除了now()
.
我设想使用此数据库来获取给定流的给定时间范围内的所有消息。我意识到我可以添加另一个UUID
字段来保证唯一性,但这会搞砸我的查询,因为我必须指定确切的时间。
排序这些数据以允许高效查询的正确方法是什么?
我在 Cassandra 分布式数据系统中连接了 5 个机器节点。我将复制因子设置为 3。
我了解到,对于 3 个复制,数据将根据协调器节点的可用性分布在 3 个节点上。当我检查各个节点时,行数有所不同。我已将大约 100k 行从 csv 传输到 cassandra。这是否意味着我必须对所有节点进行行计数才能获得结果?我正在使用 dsbulk 来检查行数。
我在这里错过了什么吗?
我创建了一个包含文本类型的列,然后将其删除。然后我想创建一个具有相同名称但类型为布尔值的列。然而系统却告诉我:
Cannot re-add previously dropped column 'isyoung' of type boolean, \
incompatible with previous type text
我在Cassandra网站上没有找到任何相关信息。我已经删除了该列,但无法更改表以重新添加该列。
我不想重建我的整个桌子。如何更改列的类型?