gpt4 book ai didi

java - Cassandra 有线协议(protocol)中的 ProtocolID 为 'duration'?

转载 作者:行者123 更新时间:2023-11-30 05:18:16 25 4
gpt4 key购买 nike

https://github/adejanovski/cassandra-jdbc-wrapper很棒,但有点过时了。例如,它的目标是 Java 1.6,它使用关键库 (datastax) 的 3.0.0 版本,其中最终版本是 3.8.0(当前版本是 4.4)等。它可以连接到 Cassandra 3.x但缺少一些最新功能。

我们已经能够 fork 该项目并将 datastax 库更新到 3.8.0,但我一直坚持添加“duration”数据类型。有一个表(似乎)将数据类型的有线协议(protocol)的 protocolId 映射到实现它的包装器类。我搜索了 datastax 代码(支持这种数据类型)和 cassandra 代码,但完全找不到正确的值,因为所有内容都使用枚举(耶!)而不是更不透明的 protocolId...但我还没有能够找到 Cassadra 服务器端的关联位置。

所以有两个问题。首先,这个项目是否已经有一个分支增加了对“持续时间”类型的支持? (我希望可以对项目及其分支进行代码搜索。)

第二,协议(protocol) ID 是什么/它在哪里定义?

此时,我几乎准备好添加一些工具,以便“未知编解码器”消息添加更多详细信息。它可以工作,但可能很脆弱。

关于 JDBC 与 CQL 的注意事项:我们当前的代码是由某人在几年前重用我们广泛的 JDBC 基础设施编写的。它“足够好”,但需要维护 JDBC 驱动程序。现在很明显,我们应该重构代码以使用 CQL,但这需要时间来编写和测试,并且客户现在就需要解决方案。我们找到了一个商业解决方案,但它与我们的系统不兼容,因为我们从 mongo 存储而不是文件系统加载 jar。 (不要问。) fork 这个驱动程序给我们一些喘息的空间。

如果有帮助的话,这是com.github.adejanovski.cassandra.jdbc中的表格:

public enum DataTypeEnum {
ASCII (1, String.class, DataType.Name.ASCII),
BIGINT (2, Long.class, DataType.Name.BIGINT),
BLOB (3, ByteBuffer.class, DataType.Name.BLOB),
BOOLEAN (4, Boolean.class, DataType.Name.BOOLEAN),
COUNTER (5, Long.class, DataType.Name.COUNTER),
DECIMAL (6, BigDecimal.class, DataType.Name.DECIMAL),
DOUBLE (7, Double.class, DataType.Name.DOUBLE),
FLOAT (8, Float.class, DataType.Name.FLOAT),
INET (16, InetAddress.class, DataType.Name.INET),
INT (9, Integer.class, DataType.Name.INT),
TEXT (10, String.class, DataType.Name.TEXT),
TIMESTAMP (11, Date.class, DataType.Name.TIMESTAMP),
UUID (12, UUID.class, DataType.Name.UUID),
VARCHAR (13, String.class, DataType.Name.VARCHAR),
VARINT (14, BigInteger.class, DataType.Name.VARINT),
TIMEUUID (15, UUID.class, DataType.Name.TIMEUUID),
LIST (32, List.class, DataType.Name.LIST),
SET (34, Set.class, DataType.Name.SET),
MAP (33, Map.class, DataType.Name.MAP),
UDT (48, UDTValue.class, DataType.Name.UDT),
TUPLE (49, TupleValue.class, DataType.Name.TUPLE),
CUSTOM (0, ByteBuffer.class, DataType.Name.CUSTOM),
SMALLINT (19, Integer.class, DataType.Name.SMALLINT),
TINYINT (20, Integer.class, DataType.Name.TINYINT),
DATE (17, Date.class, DataType.Name.DATE),
TIME (18, Date.class, DataType.Name.TIME),
DURATION (???, Duration.class, DataType.Name.DURATION);

final int protocolId;
final Class<?> javaType;
final Name cqlType;

private static final DataTypeEnum[] nameToIds;
private static final Map<DataType.Name, DataTypeEnum> cqlDataTypeToDataType;

最佳答案

类型代码及其编码信息在 CQL protocol specification - Duration type is in the version 5 中定义。 - 该类型的标识符为 0x15 (21)。您还可以在 source code of the Java driver 中找到所有代码.

关于java - Cassandra 有线协议(protocol)中的 ProtocolID 为 'duration'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59988468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com