ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ScyllaDB 与 Apache Cassandra 兼容性权威指南:接口、特性与命令对照全解析

ScyllaDB 与 Apache Cassandra 兼容性权威指南:接口、特性与命令对照全解析 ScyllaDB 与 Apache Cassandra 兼容性权威指南接口、特性与命令对照全解析【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladbScyllaDB 是一款基于 Seastar 框架的高性能 NoSQL 数据存储参见仓库根目录 README.md 与项目描述在设计上定位为 Apache Cassandra 3.11 的“即插即用替代品”drop-in replacement并额外吸收了 Apache Cassandra 4.0 的部分特性。本文以 docs/using-scylla/cassandra-compatibility.rst 为骨架逐项梳理 ScyllaDB 对 Cassandra 的接口、工具、特性与 CQL 命令兼容矩阵并结合仓库源码说明关键实现细节帮助你在迁移、评估或混合部署时准确判断哪些 Cassandra 能力可以放心使用、哪些需要替代方案。阅读本文后你将掌握ScyllaDB 支持的 Cassandra 接口版本CQL、Thrift、SSTable、JMX、配置、协议边界全套一致性级别、Snitch、Partitioner 的逐项支持状态以及 CQL 建表、压缩、索引、物化视图等命令的兼容细节可直接作为迁移决策的对照清单。如何阅读本文的兼容性表格原文档定义了三种支持状态标记本文所有表格沿用该约定标记含义vAvailable in ScyllaDB and compatible with Apache CassandraScyllaDB 支持且与 Cassandra 兼容xNot available in ScyllaDBScyllaDB 不支持NCAvailable in ScyllaDB, but not compatible with Apache CassandraScyllaDB 支持但与 Cassandra 不兼容表格仅反映 ScyllaDB 对 Apache Cassandra 既有特性的支持情况不包含 ScyllaDB 独有的、在 Cassandra 中没有对应物的功能这类 ScyllaDB 专属能力请参见仓库中的 docs/features/index.rst如 ScyllaDB 的 tablet 架构、物化视图改进、workload prioritization 等。接口层兼容性总览ScyllaDB 对各外部接口的支持版本与状态如下表源自原文档 Interfaces 一节Apache Cassandra 接口ScyllaDB 支持的版本备注CQL与 3.3.1 版本完全兼容并附带后续 CQL 版本的额外特性例如 Duration 类型见仓库 docs/cql/types.rst 中的durations锚点与协议 v4 完全兼容并附带 v5 的部分特性详见下文“CQL 命令兼容性”ThriftScyllaDB 6.0 起不再支持在 Apache Cassandra 中已被弃用并于 4.0 移除ScyllaDB 自 5.2 起弃用、6.0 移除SSTable 格式所有版本3.11mc / md / me、2.2la、2.1.8kame自 ScyllaDB 2022.2.0 起支持md自 ScyllaDB 2021.1.0 起支持JMX3.11详见下文“Supported Tools”配置cassandra.yaml3.11ScyllaDB 使用自己的 conf/scylla.yaml 作为配置入口Log日志NCScyllaDB 支持但与 Cassandra 格式不兼容Gossip 与内部流式传输internal streamingNC属于 ScyllaDB 自研实现与 Cassandra 不互通SSLNC支持但实现细节与 Cassandra 不同从源码看 SSTable 版本支持SSTable 格式的支持范围可以直接在源码中得到印证sstables/version.hh 中定义了enum class sstable_version_types { ka, la, mc, md, me, ms, mt }其中ka对应 Cassandra 2.1.8、la对应 Cassandra 2.2、mc/md/me对应 Cassandra 3.11 的系列格式而ms、mt是 ScyllaDB 自身的扩展格式这也解释了表格中“Gossip 与内部流式传输为 NC”的原因——底层存储与传输组件经过自研演进无法与 Cassandra 直接互通。oldest_writable_sstable_format被设定为mc表明 ScyllaDB 默认写入至少是 Cassandra 3.x 兼容的 SSTable 格式。受支持的运维工具原文档明确ScyllaDB 提供的工具基于 Apache Cassandra 3.11。仓库中的工具清单docs/operating-scylla/_common/tools_index.rst包括Nodetool Referencedocs/operating-scylla/nodetool.rst基于命令行的 nodetool 工具用于管理 ScyllaDB 节点或集群。CQLShCQL Shelldocs/cql/cqlsh.rstCQL 交互式命令行。Admin REST APIdocs/operating-scylla/rest.rstScyllaDB 节点管理 API。Tracingdocs/using-scylla/tracing.rst用于调试与分析服务器内部流程。SSTableloaderdocs/operating-scylla/admin-tools/sstableloader.rst将指定目录中的 SSTable 批量加载进 ScyllaDB 集群是迁移存量数据的关键工具。ScyllaDB SSTabledocs/operating-scylla/admin-tools/scylla-sstable.rst校验并导出 SSTable 内容、生成直方图、导出 SSTable 索引。ScyllaDB Typesdocs/operating-scylla/admin-tools/scylla-types/index.rst检查从 SSTable、日志、coredump 等处获取的原始值。cassandra-stressdocs/operating-scylla/admin-tools/cassandra-stress/index.rstScyllaDB 与 Cassandra 集群通用的基准与负载测试工具。scylla local-file-key-generator按指定长度、密钥算法、算法块模式与填充方式生成本地文件系统密钥用于静态加密encryption at rest见 docs/operating-scylla/security/encryption-at-rest.rst。scyllatop类似 top 的终端工具用于查看 ScyllaDB collectd/prometheus 指标。scylla_dev_mode_setupdocs/getting-started/installation-common/dev-mod.rst以开发者模式运行 ScyllaDB。perftunedocs/operating-scylla/admin-tools/perftune.rst性能调优配置工具。select-from-mutation-fragmentsdocs/operating-scylla/admin-tools/select-from-mutation-fragments/index.rst从表中导出底层 mutation 数据。Maintenance socketdocs/operating-scylla/admin-tools/maintenance-socket/index.rst提供完全权限 CQL 连接的 Unix domain socket。Maintenance modedocs/operating-scylla/admin-tools/maintenance-mode/index.rst对离线 ScyllaDB 节点执行维护任务的模式。Task managerdocs/operating-scylla/admin-tools/task-manager/index.rst跟踪后台长时运行任务的工具。Compression Advisordocs/operating-scylla/admin-tools/compression-advisor/index.rst分析表的压缩配置并推荐可减少磁盘占用的 LZ4/ZSTD 参数。每个工具均可用-h或--help查看完整选项说明。核心特性兼容矩阵一致性级别读与写ScyllaDB 对 Cassandra 全部常用一致性级别的支持如下对应原文档 Consistency Level 表选项支持状态Any仅写vOnevTwovThreevQuorumvAllvLocal OnevLocal QuorumvEach Quorum仅写vSERIALv *LOCAL_SERIALv ** 关于 SERIAL / LOCAL_SERIAL 的详细说明参见 docs/features/lwt.rstScyllaDB 的轻量事务实现。源码佐证db/consistency_level_type.hh 中定义的枚举consistency_level恰好包含ANY、ONE、TWO、THREE、QUORUM、ALL、LOCAL_QUORUM、EACH_QUORUM、SERIAL、LOCAL_SERIAL、LOCAL_ONE全部 11 个级别与表格一一对应db/consistency_level.hh 中quorum_for、local_quorum_for、block_for_each_quorum、is_sufficient_live_nodes、assure_sufficient_live_nodes等函数则负责根据有效复制映射effective replication map与存活端点计算每种级别所需的阻塞节点数是读写路径上一致性判定的核心实现。Snitch拓扑感知组件选项支持状态SimpleSnitchvRackInferringSnitchvPropertyFileSnitchxGossipingPropertyFileSnitchvDynamic snitchingxEC2SnitchvEC2MultiRegionSnitchvGoogleCloudSnitchvCloudstackSnitchxAzureSnitchv各 Snitch 的源码位于 locator/ 目录simple_snitch.cc、rack_inferring_snitch.cc、gossiping_property_file_snitch.cc、ec2_snitch.cc、ec2_multi_region_snitch.cc、gce_snitch.cc、azure_snitch.cc均在仓库中真实存在。以 locator/ec2_snitch.cc 与 locator/azure_snitch.cc 为例云环境 Snitch 通过查询云厂商元数据 API 获取 region / zone 信息如 Azure 的location、zone查询路径来完成拓扑发现locator/simple_snitch.cc 则是单数据中心场景的默认选择。文档中的 PropertyFileSnitch 与 Dynamic snitching 标记为不支持需改用 GossipingPropertyFileSnitch 等替代方案。Partitioner分区器选项支持状态Murmur3Partitioner默认vRandomPartitionerxOrderPreservingPartitionerxByteOrderedPartitionerxCollatingOrderPreservingPartitionerx源码佐证dht/murmur3_partitioner.hh 中murmur3_partitioner::name()返回org.apache.cassandra.dht.Murmur3Partitioner与 Cassandra 的默认分区器类名完全一致确保使用既有 Cassandra 数据的用户无需修改分区配置。其余历史分区器Random、OrderPreserving、ByteOrdered、CollatingOrderPreserving因数据分布特性或已废弃而不被支持。协议选项加密 / 认证 / 压缩选项支持状态加密Encryptionv认证Authenticationv压缩Compression详见下节v加密与认证的操作文档分别见 docs/operating-scylla/security/client-node-encryption.rst 与 docs/operating-scylla/security/authentication.rst。压缩选项支持状态CQL CompressionvLZ4vSnappyv节点间压缩Node to Node Compressionv客户端到节点压缩Client to Node CompressionvScyllaDB 同时支持 CQL 传输层压缩LZ4、Snappy与存储层压缩见下文“建表压缩属性”。节点间与客户端到节点压缩的配置说明分别对应原文档引用的internode-compression与admin-client-node-compression锚点可在 docs/operating-scylla/compression.rst 等运维章节查阅。备份与恢复选项支持状态快照Snapshotv增量备份Incremental backupv恢复Restorev快照与增量备份操作指南见 docs/features/backup-and-restore.rst恢复过程见 docs/operating-scylla/procedures/backup-restore/restore.rst。修复与一致性选项支持状态Nodetool Repairv增量修复Incremental RepairxHinted Handoffv轻量事务LWTvnodetool repair的用法见 docs/operating-scylla/nodetool-commands/repair.rstHinted Handoff 机制见 docs/architecture/anti-entropy/hinted-handoff.rst。增量修复在 ScyllaDB 中标记为不支持ScyllaDB 的修复整体上已针对大集群做了重新设计可参考 docs/features/incremental-repair.rst 了解其修复模型。轻量事务SERIAL / LOCAL_SERIAL 一致性级别详情见 docs/features/lwt.rst。副本放置策略Replication Strategy选项支持状态SimpleStrategyvNetworkTopologyStrategyv源码佐证locator/simple_strategy.cc 是SimpleStrategy的实现其构造器解析replication_factor配置项calculate_natural_endpoints沿 token ring 顺序收集副本端点值得注意的实现细节是类注册时同时注册了全限定名org.apache.cassandra.locator.SimpleStrategy与短名SimpleStrategylocator/simple_strategy.cc这正是兼容 Cassandra 中该策略全类名写法的基础。NetworkTopologyStrategy对应 locator/network_topology_strategy.cc。安全选项支持状态基于角色的访问控制RBACvScyllaDB 完整支持 Cassandra 风格的 RBACCREATE ROLE、GRANT、REVOKE等实现位于 auth/ 目录包括standard_role_manager.cc标准角色管理器、default_authorizer.cc默认授权器与password_authenticator.cc口令认证器。索引与缓存选项支持状态二级索引Secondary IndexvStorageAttachedIndexSAIx面向向量搜索的 SAIv *物化视图Materialized Viewsv* 向量列上的 SAI 类名会被重写为 ScyllaDB 原生vector_indexSAI 作用于ENTRIES(map)时会被重写为普通二级索引需开启enable_cassio_compatibility: true。源码佐证上述“SAI 重写”逻辑在 cql3/statements/create_index_statement.cc 中有完整实现maybe_rewrite_sai_index函数首先检查自定义索引类名是否为 SAIis_sai_class_name若目标列是向量列则改写为原生vector_index若目标是 map 列上的ENTRIES即 CassIO/LangChain 元数据索引模式且未开启enable_cassio_compatibility则抛出invalid_request_exception并提示用户开启该配置项以重写为普通二级索引开启后会将custom_class清空并降级为常规二级索引同时向客户端发出警告“SAI is not supported by ScyllaDB…rewritten to use a regular secondary index”。该配置项在 db/config.hh 中定义为named_valuebool enable_cassio_compatibility;默认关闭。ScyllaDB 原生二级索引见 docs/features/secondary-indexes.rst 与 docs/cql/secondary-indexes.rst向量搜索见 docs/features/vector-search.rst其实现位于 index/vector_index.cc 与 vector_search/。附加特性特性支持状态Counters计数器v用户自定义类型UDTv用户自定义函数UDFx *生存时间TTLvSuper ColumnxvNode 启用v默认vNode 禁用x触发器Triggersx批量请求BATCHv包含条件更新* UDF 标记为“实验性”Experimental。其中 Counters 的说明见 docs/features/counters.rstScyllaDB 始终默认启用 vNode 式的多 token 分配不支持关闭。Super Column、Triggers 为 Cassandra 历史遗留或被 ScyllaDB 明确放弃的能力迁移时需改用二级索引/物化视图等替代设计。CQL 命令兼容性CREATE KEYSPACE特性支持状态DURABLE_WRITESvIF NOT EXISTSvWITH REPLICATIONv详见下表带复制策略的建键空间特性支持状态SimpleStrategyvNetworkTopologyStrategyvOldNetworkTopologyStrategyxOldNetworkTopologyStrategy为 Cassandra 历史遗留策略不提供支持。CREATE TABLE特性支持状态Primary key columnvCompound primary keyvComposite partition keyvClustering ordervStatic columnv建表属性Table Attributes属性支持状态bloom_filter_fp_chancevcachingx被忽略commentvcompactionvcompressionvdefault_time_to_livevgc_grace_secondsvindex_intervalxmax_index_intervalvmemtable_flush_period_in_msx被忽略min_index_intervalvpopulate_io_cache_on_flushxreplicate_on_writexspeculative_retry仅支持ALWAYS、NONE需要特别留意三个“部分兼容”项caching与memtable_flush_period_in_ms在 ScyllaDB 中会被静默忽略ScyllaDB 拥有自研的 row cache 与 memtable 调度不采用 Cassandra 的这些控制参数speculative_retry只接受ALWAYS与NONE两个取值若 Cassandra 侧配置了基于百分位数/毫秒的取值需要相应调整。建表压缩策略Compaction Strategies策略支持状态SizeTieredCompactionStrategySTCSvLeveledCompactionStrategyLCSvDateTieredCompactionStrategyDTCSx *TimeWindowCompactionStrategyTWCSv* DTCS 不再支持请改用 TimeWindowCompactionStrategyTWCS。各策略的实现位于 compaction/ 目录size_tiered_compaction_strategy.cc、leveled_compaction_strategy.cc、time_window_compaction_strategy.cc均在仓库中可查compaction_strategy.cc中通过类注册机制将 Cassandra 的策略类名映射到 ScyllaDB 实现保证CREATE TABLE ... WITH compaction {class: SizeTieredCompactionStrategy}这类既有建表语句可原样执行。建表压缩属性Compression Options属性支持状态sstable_compression LZ4Compressorvsstable_compression SnappyCompressorvsstable_compression DeflateCompressorvchunk_length_kbvcrc_check_chancexSSTable 层的 LZ4、Snappy、Deflate 压缩器全部兼容crc_check_chance在 ScyllaDB 中不支持ScyllaDB 始终对读取执行完整 CRC 校验无需概率性抽样校验参数。ALTER 命令命令支持状态ALTER KEYSPACEvALTER TABLEvALTER TYPEvALTER USERvALTER ROLEv数据操作DML命令支持状态BATCHvINSERTvPrepared StatementsvSELECTvTRUNCATEvUPDATEvUSEv创建命令命令支持状态CREATE TRIGGERxCREATE USERvCREATE ROLEv删除命令命令支持状态DROP KEYSPACEvDROP TABLEvDROP TRIGGERxDROP TYPEvDROP USERvDROP ROLEvCREATE TRIGGER/DROP TRIGGER与“附加特性”表中的 Triggers 一致均为不支持项。角色与权限命令支持状态GRANT PERMISSIONSvGRANT ROLEvLIST PERMISSIONSvLIST USERSvLIST ROLESvREVOKE PERMISSIONSvREVOKE ROLEv物化视图命令支持状态MATERIALIZED VIEWvALTER MATERIALIZED VIEWvCREATE MATERIALIZED VIEWvDROP MATERIALIZED VIEWv物化视图的完整使用指南见 docs/features/materialized-views.rst。索引命令命令支持状态INDEXvCREATE INDEXvDROP INDEXv迁移实践要点总结基于以上兼容矩阵从 Cassandra 迁移到 ScyllaDB 时可重点关注以下几点协议与驱动层CQL 协议 v4 完全兼容、v5 部分特性可用绝大多数基于 Cassandra 3.11 生态的客户端驱动无需改动即可接入但 Thrift 接口在 ScyllaDB 6.0 已移除仍依赖 Thrift 的存量应用必须先完成改造。数据层SSTable 支持 Cassandra 2.1.8ka、2.2la与 3.11mc/md/me格式可借助 SSTableloader 等工具将存量 SSTable 批量导入默认写入格式为 mc 及以上保证下游 Cassandra 3.x 兼容性。集群拓扑与分布Partitioner 仅支持 Murmur3默认且类名与 Cassandra 完全一致旧式 Random/OrderPreserving/ByteOrdered 分区器不兼容Snitch 层面需将 PropertyFileSnitch 与 Dynamic snitching 方案替换为 GossipingPropertyFileSnitch 或各云厂商 Snitch。表级配置建表时caching、memtable_flush_period_in_ms会被忽略speculative_retry仅接受ALWAYS/NONEindex_interval、populate_io_cache_on_flush、replicate_on_write、crc_check_chance不支持DTCS 压缩策略需替换为 TWCS。功能替换SAI 在 ScyllaDB 中不被原生支持但向量列索引会被自动重写为原生vector_indexENTRIES(map)索引在开启enable_cassio_compatibility: true配置项定义于 db/config.hh重写逻辑见 cql3/statements/create_index_statement.cc后会降级为普通二级索引Triggers、Super Column、UDF实验性等能力需寻找替代设计。一致性语义全部 11 个一致性级别与 Cassandra 对齐SERIAL/LOCAL_SERIAL 依赖 LWT 实现见 docs/features/lwt.rst复制策略 SimpleStrategy 与 NetworkTopologyStrategy 均可直接沿用。如需查阅 ScyllaDB 相对 Cassandra 的增量能力如 tablet、workload prioritization、CDC 增强等请继续阅读 docs/features/index.rst各运维命令与工具的操作细节可在 docs/operating-scylla/ 目录下按需检索。【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表