十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

ScyllaDB Alternator 兼容性深度指南:DynamoDB 用户迁移前必读的差异、限制与配置清单

ScyllaDB Alternator 兼容性深度指南:DynamoDB 用户迁移前必读的差异、限制与配置清单 ScyllaDB Alternator 兼容性深度指南DynamoDB 用户迁移前必读的差异、限制与配置清单【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb导读本文以 ScyllaDB 仓库中的官方兼容性文档 docs/alternator/compatibility.md 为骨架系统梳理 AlternatorScyllaDB 对 Amazon DynamoDB API 的兼容层与 DynamoDB 在供给模型、写入隔离、鉴权授权、指标体系、TTL、流与未实现 API 上的全部差异。读完本文你将掌握迁移前需要评估的每一项行为差异、对应的 ScyllaDB 配置参数含默认值与源码出处、以及如何用监控指标与 CQL 命令完成安全切换与权限治理。ScyllaDB 通过 Alternator 提供了完整的 DynamoDB API 兼容层其目标是任何为 Amazon DynamoDB 编写的应用都可以不加修改地在 ScyllaDB 上运行。这一目标绝大部分已经达成但 DynamoDB 是共享云服务、ScyllaDB 是私有集群数据库两者在底层模型上的差异决定了若干行为必然不同也有一部分 DynamoDB 功能尚未实现。本文逐节说明这些差异帮助 DynamoDB 用户理解迁移时的行为预期并给出对应的配置与规避手段。Provisioning从按吞吐供给到按集群供给最根本的差异是资源模型DynamoDB 是共享云服务允许用户provision每秒请求数或按需付费ScyllaDB 是运行在私有集群上的专用服务用户需要自行规划节点数量与节点规格而不是吞吐量。具体到表级别DynamoDB 的 per-table provisioningBillingModePROVISIONED目前不被 ScyllaDB 支持BillingMode与ProvisionedThroughput选项在表上必须合法、但会被忽略ScyllaDB 的行为等价于 DynamoDB 的BillingModePAY_PER_REQUEST——所有请求都被接受没有按表的吞吐上限。这一设计贯穿整个兼容性文档没有吞吐供给就意味着没有节流事件ThrottleEvents、没有ProvisionedCapacityUnits类指标见 Metrics 一节也意味着第 1 节的表容量规划思路在 ScyllaDB 上不适用。从源码看Alternator 在写入路径上使用db::consistency_level::LOCAL_QUORUM见 alternator/executor.cc 中execute_write相关的proxy.mutate调用即在本地数据中心内做法定多数确认而不是按 RCU/WCU 计数放行。负载均衡Alternator 不内置需要自建或客户端自行分发DynamoDB 应用只指定一个 endpoint如dynamodb.us-east-1.amazonaws.com由 AWS 云服务把该 URL 的请求分发到众多后端节点。Alternator 内部不包含这种负载均衡设施。你需要自行搭建负载均衡器或配置客户端库做客户端侧负载均衡。官方推荐的负载均衡实践仓库为 https://github.com/scylladb/alternator-load-balancing/外部链接需自行访问。为了让负载均衡器能够发现节点Alternator 提供了两个免认证的 HTTP 发现端点详见 Alternator-specific APIsGET /健康检查返回healthy: localhost:8000GET /localnodes返回本数据中心全部存活节点的 IP 列表JSON 数组并支持?dcdc1、?rackrack1参数组合过滤。写入隔离策略必须显式配置的四个模式DynamoDB 的每个写操作都可能需要读取 item 的旧值例如条件更新、基于旧属性的更新读与写应当作为一个事务被隔离。Alternator 可以选择用 ScyllaDB 的 LWT轻量事务来隔离所有写操作但这会显著拖慢写入速度且对不含读改写RMW的工作负载没有必要。因此 Alternator 支持四种写入隔离策略可在每个表级别选择策略值tag 取值行为适用场景a/always/always_use_lwt每次写即使不需要读都走 LWT唯一对任意工作负载都保证正确的最安全选择但最慢f/forbid/forbid_rmw禁止需要读后写的请求如带ConditionExpression的UpdateItem会报错剩余纯写用普通 ScyllaDB 写纯写入工作负载如新数据灌入的最快安全选择不适用于需要 RMW 的表o/only_rmw_uses_lwt仅对 RMW 操作使用 LWT纯写用普通 quorum 写允许快速纯写 慢速 RMW 混用仅当工作负载不会并发地对同一 item 混用两类写时安全且系统无法验证该条件u/unsafe/unsafe_rmwRMW 拆成独立读与写无隔离保证最快但不安全不推荐任何场景未来可能移除配置方式必须用--alternator-write-isolation配置项选择一个默认策略同时可在CreateTable时或之后任意时刻通过TagResource用 tag 键system:write_isolation覆盖单表策略。从源码看这四种策略在 alternator/rmw_operation.hh 中定义为enum class write_isolation { FORBID_RMW, LWT_ALWAYS, LWT_RMW_ONLY, UNSAFE_RMW }tag 键常量WRITE_ISOLATION_TAG_KEY system:write_isolation亦在该文件定义。在 alternator/executor.cc 中可以看到 LWT 路径通过db::consistency_level::LOCAL_SERIAL配合LOCAL_QUORUM执行 CAScompare-and-swap而普通写路径则直接proxy.mutate。避免写乱序时间戳、NTP 与 LWT当应用对同一 item 写两次时期望last-write-wins。在always_use_lwt下这有保证但在其他策略下ScyllaDB 不保证写不被重排每次写请求会获得一个时间戳即接收该请求的服务器上的当前时间如果两个写请求到达不同的 Alternator 节点且两节点本地时钟未精确同步则两个独立生成的时间戳顺序可能与真实到达顺序相反——较早的写可能拿到更高的时间戳并赢。缓解手段按文档顺序用 NTP 保持各 ScyllaDB 节点时钟同步若两次写之间的延迟大于 NTP 精度则不会被重排若应用要确保某两个写不重排应把两个请求发到同一个 ScyllaDB 节点注意负载均衡器可能把两个请求分发到不同节点考虑always_use_lwt——更慢但保证更强。always_use_lwt还能提供其他模式没有的保证对同一 item 的写是串行化的——即使两个写同时到达两个不同节点结果也表现为一个先、一个后。而在非 LWT 模式下两个写可能拿到完全相同的微秒级时间戳结果可能是两次写的混合部分属性来自这次、部分来自那次而不是二选一。认证与授权从默认全开放到 SigV4 角色权限开启认证的三个配置项默认情况下 Alternator不强制认证/授权任何连接的客户端请求都会被放行。要启用在 ScyllaDB 配置中设置alternator_enforce_authorization: true安全切换建议在客户端应用尚未配好密钥与权限表时直接从false切到true会导致应用请求立刻失败。推荐做法是先保持alternator_enforce_authorizationfalse同时设置alternator_warn_authorizationtrue。此时所有请求仍然放行但会计数潜在的认证/授权失败于两个指标scylla_alternator_authentication_failuresscylla_alternator_authorization_failuresalternator_warn_authorizationtrue还会在每次认证/授权失败时产生一条 WARN 级日志日志包含字符串alternator_enforce_authorizationtrue以及定位问题所需的信息——涉及的用户名、发送请求的客户端地址。当两个指标不再增长或不再出现日志时即可确认应用已正确配置再把alternator_enforce_authorization置为true。此后alternator_warn_authorization可保留或关闭取决于你是否想在请求失败时看到日志无论开关与否指标都会计数客户端也会收到错误。从源码看这套计数但不阻断/计数且阻断的逻辑实现在 alternator/executor_util.cc 的authorization_error()函数它总是先stats.authorization_failures然后按enforce_authorization决定是否抛出access_denied并按warn_authorization决定是否记录 WARN 日志。服务端入口处的认证失败日志在 alternator/server.cc。SigV4 签名与 CQL 角色Alternator 实现与 DynamoDB 及整个 AWS 相同的签名协议AWS Signature Version 4。客户端照常用 access key ID 与 secret access key 证明身份与请求真实性Alternator 用已知的授权密钥对列表校验每个请求的签名与授权。创建用户使用 CQL 的CREATE ROLE客户端签名请求时角色名作为 access key ID角色密码的salted hash 作为 secret key角色 XYZ 的 secret key 可用 CQL 查询SELECT salted_hash from system.roles WHERE role XYZ;mTLS 作为替代认证方式Alternator 还支持**双向 TLSmTLS**作为替代认证方法。当 HTTPS 端口以require_client_authtrue或require_client_authoptional配置通过--alternator-encryption-options时出示有效证书的客户端以证书的 subject 字段DN 或 SAN作为用户名完成认证——无需也不能校验 SigV4 签名require_client_authtrue客户端证书强制必选require_client_authoptional证书可选mTLS 与 SigV4 客户端可共享同一端口。完整配置细节见 Mutual TLS (mTLS) for Alternator。授权用 CQL GRANT 而非 DynamoDB IAMAlternator 的访问控制目前不兼容DynamoDB 的 IAM /PutResourcePolicy而是用 CQL 的GRANT命令把权限授予特定角色。例如Alternator 表 xyz 在 CQL 视角下可见为alternator_xyz.xyz以下命令允许用户 myrole 读取该表GetItem 及其他读操作GRANT SELECT ON alternator_xyz.xyz TO myrole各 API 操作所需权限映射如下权限API 操作SELECTGetItem, Query, Scan, BatchGetItem, GetRecordsMODIFYPutItem, DeleteItem, UpdateItem, BatchWriteItemCREATECreateTableDROPDeleteTableALTERUpdateTable, TagResource, UntagResource, UpdateTimeToLive无需权限ListTables, DescribeTable, DescribeEndpoints, ListTagsOfResource, DescribeTimeToLive, DescribeContinuousBackups, ListStreams, DescribeStream, GetShardIterator注意所需权限取决于操作类型而非其行为。例如PutItem配合ReturnValuesALL_OLD时虽然会读到 item 旧值但仍要求MODIFY权限而非SELECT。权限对基表与其每个 GSI/LSI/CDC log 是彼此独立的因此可以只给某个角色一个索引的读权限而不给基表的。构造 GRANT 命令需要知道对象的 CQL 名称例如 Alternator 表 xyz 的 GSI abc 其 CQL 名为alternator_xyz.xyz:abc。若不知道表名可尝试一次被禁止的操作返回的AccessDeniedException错误中会包含缺少权限的表名。工作负载隔离Workload Prioritization服务等级份额DynamoDB 中每张表的读写容量可固定provisioned或自适应on-demand此外还有按表与按账户的配额。由于 Alternator 部署形态下整个集群均可服务用户请求、底层硬件可被充分利用当需要让某个工作负载获得更多资源牺牲其他竞争工作负载时Alternator 提供Workload Prioritization工作负载优先级化特性。用法定义一个带固定 shares份额的 service level值越大表示按比例获得更多容量并将其挂载attach到用于授权请求的角色上。目前只能通过 CQL API 完成CREATE ROLE alice WITH PASSWORD abcd AND LOGIN true; CREATE ROLE bob WITH PASSWORD abcd AND LOGIN true; CREATE SERVICE_LEVEL IF NOT EXISTS olap WITH SHARES 100; CREATE SERVICE_LEVEL IF NOT EXISTS oltp WITH SHARES 1000; ATTACH SERVICE_LEVEL olap TO alice; ATTACH SERVICE_LEVEL oltp TO bob;注意使用该特性要求 ScyllaDB 配置中已启用alternator_enforce_authorization。关于角色与授权的更多细节见本文认证与授权一节Workload Prioritization 的完整原理见 Workload Prioritization。指标体系DynamoDB CloudWatch 指标与 ScyllaDB 指标对照ScyllaDB 拥有强大而深入的监控框架基于 Grafana Prometheus可度量并绘制数百个指标。这与 DynamoDB 的监控方案不同但功能显著更强能提供数据库内部与性能的更好洞察。以下将每个 DynamoDB CloudWatch 指标映射到最近的 ScyllaDB 指标如存在。ScyllaDB 指标遵循 Prometheus 命名约定通过其监控栈访问。多数指标的按表变体以scylla_alternator_table_*前缀提供并附加{cftable_name}标签以及kskeyspace_name}标签表名为T时其 keyspace 名为alternator_T。DynamoDB 指标ScyllaDB 对应指标说明ConditionalCheckFailedRequestsscylla_alternator_conditional_check_failedConsumedReadCapacityUnitsscylla_alternator_rcu_total1 个 RCU 代表最多读取 4 KB。ConsumedWriteCapacityUnitsscylla_alternator_wcu_total{opX}适用于PutItem、DeleteItem、UpdateItem与Index。所有op标签值求和即为总量Indexop 计入写入 GSI 所消耗的 WCU。OnlineIndexPercentageProgress尚不可用GSI 回填backfill指标尚未暴露。ReturnedBytesscylla_alternator_operation_size_kb{opGetRecords}直方图GetRecords响应大小的近似 KB 数由记录属性名/值大小推导而非精确的序列化响应/主体字节数不要视为与 CloudWatchReturnedBytes精确等价。ReturnedItemCountscylla_alternator_returned_items统计Query与Scan在 filter 求值后返回的条目数另有scylla_alternator_returned_items_histogram每次操作条目数的直方图。ReturnedRecordsCountscylla_alternator_returned_records统计GetRecords操作返回的流记录数。SuccessfulRequestLatencyscylla_alternator_op_latency{opX}直方图适用于PutItem、GetItem、DeleteItem、UpdateItem、BatchWriteItem、BatchGetItem、GetRecords、Query、Scan另有scylla_alternator_op_latency_summary{opX}仅全局预计算分位数不可跨 shard 聚合。SystemErrorsscylla_alternator_system_errors仅全局。统计 HTTP 500内部服务器错误响应。UserErrorsscylla_alternator_user_errors仅全局。统计 HTTP 400客户端错误响应排除ConditionalCheckFailedExceptionDynamoDB 同样排除。认证/授权失败另有专用计数器见上文认证与授权一节。TableCount尚不可用账户内活跃 DynamoDB 表的数量。TimeToLiveDeletedItemCountscylla_expiration_items_deletedTTL 扫描活动另见scylla_expiration_scan_passes与scylla_expiration_scan_table。TransactionConflict尚不可用Alternator 尚不支持TransactWriteItems。这些计数器在 alternator/stats.hh 中有对应定义如returned_items、user_errors、system_errors、requests_shed等并在 alternator/executor.cc 的写路径中累加例如conditional_check_failed、wcu_total[stats::wcu_types::PUT_ITEM] wcu_total。因功能缺失而不适用的 DynamoDB 指标以下几组指标在 Alternator 中没有对应物因为底层功能不存在Provisioned throughput 限制在 Alternator 中不生效见 Provisioning 一节因此以下指标不适用AccountMaxReads、AccountMaxTableLevelReads、AccountMaxTableLevelWrites、AccountMaxWrites、AccountProvisionedReadCapacityUtilization、AccountProvisionedWriteCapacityUtilization、MaxProvisionedTableReadCapacityUtilization、MaxProvisionedTableWriteCapacityUtilization、OnDemandMaxReadRequestUnits、OnDemandMaxWriteRequestUnits、ProvisionedReadCapacityUnits、ProvisionedWriteCapacityUnits、AccountProvisionedReadCapacityUnits、AccountProvisionedWriteCapacityUnits。Throttle 事件在 Alternator 中不会发生不强制按表吞吐限制。指标scylla_alternator_requests_shed统计因内存压力或整体过载而被拒绝的请求是最接近的类比。以下 DynamoDB 指标不适用ReadThrottleEvents、WriteThrottleEvents、ThrottledRequests、ReadAccountLimitThrottleEvents、ReadKeyRangeThroughputThrottleEvents、ReadMaxOnDemandThroughputThrottleEvents、ReadProvisionedThroughputThrottleEvents、WriteAccountLimitThrottleEvents、WriteKeyRangeThroughputThrottleEvents、WriteMaxOnDemandThroughputThrottleEvents、WriteProvisionedThroughputThrottleEvents。Kinesis Data Streams集成不受支持以下指标不适用AgeOfOldestUnreplicatedRecord、ConsumedChangeDataCaptureUnits、FailedToReplicateRecordCount、ThrottledPutRecordCount。AWS Fault Injection ServiceFIS实验不受支持指标FaultInjectionServiceInducedErrors由 AWS FIS 实验诱导的模拟 HTTP 500 错误不适用。DynamoDB Global Tables对于全局跨区域表Alternator 依赖 ScyllaDB 原生的多数据中心复制。以下指标不适用PendingReplicationCount、ReplicationLatency。Time To LiveTTL延迟可配置与 DynamoDB 一样被设置到期时间的 Alternator item不会在到期时刻立刻消失而是有一定延迟。DynamoDB 保证延迟小于 48 小时小表通常短得多。在 Alternator 中到期延迟可配置通过--alternator-ttl-period-in-seconds配置项设置默认值为 24 小时。源码中 alternator/ttl.cc 将该秒数转换为毫秒周期long(_db.get_config().alternator_ttl_period_in_seconds() * 1000)用于 TTL 扫描调度。Scan 排序哈希函数不同分区顺序不可依赖DynamoDB 扫描整表时分区按分区键的某个未文档化哈希函数排序这也是该键被称为 hash key 的原因。Alternator 使用不同的哈希函数——Cassandra 的 128 位 Murmur3 哈希变体源码可见于 dht/murmur3_partitioner.cc。因此对同样的数据DynamoDB 与 Alternator 的Scan返回相同的数据但分区顺序不同。应用不得依赖这种未文档化的顺序。注意每个分区内部的条目排序在 DynamoDB 与 ScyllaDB 中是一致的——由该表定义的sort key决定。可配置或不同的限制一些在 DynamoDB 中固定不变的限制在 Alternator 中不存在、不同或可配置BatchWriteItem 条数上限DynamoDB 限制每次 25 个 itemAlternator 默认100可用alternator_max_items_in_batch_write配置参数修改。源码中 alternator/executor.cc 读取该配置值并在超限时抛出包含配置变量名的校验错误。命名长度限制DynamoDB 限制表、GSI、LSI 名称各 255 字符Alternator 不同表名上限192字符GSI表名长度 GSI 名长度 1 ≤222字符LSI表名长度 LSI 名长度 2 ≤222字符。例如表名 192 字符时GSI 名最多 29 字符。DescribeTable 信息延迟按 AWS 文档TableSizeBytes、IndexSizeBytes、ItemCount字段最多滞后 6 小时。alternator_describe_table_info_cache_validity_in_seconds参数允许修改该超时——默认值为 21600 秒6 小时。源码中 alternator/executor.cc 直接使用该配置值作为 DescribeTable 信息缓存的过期时间。Alternator Streams变更数据捕获的差异清单Alternator 支持 DynamoDB Streams API变更数据捕获但与 DynamoDB Streams 存在如下差异Shard 数量Alternator 流中独立 shard 的数量显著多于DynamoDB 的典型数量数据延迟DynamoDB 中数据通常在写入后不到一秒即出现在流中Alternator Streams 目前默认延迟 10 秒GetRecords 响应字段Alternator 将eventSource设为scylladb:alternator而非aws:dynamodb且不设置dynamodb字段内的SizeBytes子字段。这两点在源码 alternator/streams.cc 中可印证// TODO: SizeBytes与rjson::add(rec.record, eventSource, scylladb:alternator)alternator_streams_increased_compatibility默认关闭默认情况下 Alternator Streams 面向性能优化——写操作不读取 item 前值带来两个后果未真正修改数据的操作删除不存在的 item、移除不存在的属性、重插相同 item仍可能产生虚假的流事件Alternator 无法区分 INSERT新 item与 MODIFY覆盖已有 item事件类型可能不准确——例如覆盖已有 item 的PutItem会被报告为 INSERT 而非 MODIFY。启用alternator_streams_increased_compatibility会强制每次写都读取 item 前像pre-image修复上述两个问题但代价是性能——实际等于强制所有写走较慢的 LWT轻量事务路径。仅当应用依赖 INSERT/MODIFY 区分、或需要 no-op 写静默时才启用该选项。源码中该开关与 CDC 启用状态共同决定写路径行为见 alternator/executor.cc 等处的alternator_streams_increased_compatibility schema()-cdc_options().enabled() ...。禁用/重新启用流的语义当流被禁用时不再写入新记录但已有流数据保留且仍可通过原 StreamArn 读取数据经 TTL 于24 小时后过期。重新启用流会立即清除旧数据并产生新的 StreamArn。与之对比DynamoDB 在重新启用后仍会通过旧 StreamArn 保留旧流及其数据 24 小时。尚未实现的 DynamoDB API 功能清单总体而言Amazon DynamoDB 中每个可用的 API 功能在 Alternator 中应表现相同但仍有少量功能尚未实现。未实现的功能在被使用时都会返回错误因此容易检测。完整清单如下GSI/LSI 子集投影GSI全局二级索引与 LSI本地二级索引可配置为只投影基表属性子集此选项暂未被 Alternator 尊重——所有属性都会被投影不需要时会浪费磁盘空间。多 item 事务TransactWriteItems、TransactGetItems不受支持DynamoDB 2018 年 11 月加入。注意较老的单 item 条件更新是完整支持的。全局表控制 APICreateGlobalTable、UpdateGlobalTable、DescribeGlobalTable、ListGlobalTables、UpdateGlobalTableSettings、DescribeGlobalTableSettings、UpdateTable尚未支持。目前所有Alternator 表都以全局表方式创建可从创建时刻已存在的全部 DC 访问。若表创建后才新增 DC新 DC 看不到该表需用 CQLALTER KEYSPACE修改表的复制策略。Kinesis StreamsDynamoDB 在 DynamoDB Streams API 之外新增的 Kinesis Streams 支持尚不支持相关操作DescribeKinesisStreamingDestination、DisableKinesisStreamingDestination、EnableKinesisStreamingDestination亦不支持DynamoDB 2020 年 11 月加入。按需备份 APICreateBackup、DescribeBackup、DeleteBackup、ListBackups、RestoreTableFromBackup不受支持。当前用户可使用 ScyllaDB 现有备份方案如快照snapshots或 ScyllaDB Manager。连续备份PITR任意时间点恢复能力尚不支持UpdateContinuousBackups、DescribeContinuousBackups、RestoreTableToPointInTime。静态加密设置DynamoDB 的 encryption-at-rest 设置不受支持。静态加密功能在 ScyllaDB 中存在但需单独启用与配置而非通过 DynamoDB API。吞吐核算与上限BillingMode选项被忽略指定的 provisioned throughput 也被忽略请求要求返回所用 provisioned throughput 时Alternator 不会返回。DAXDynamoDB Accelerator不可用。但一般也不必——ScyllaDB 内置缓存已相当先进无需在其前再放置一层缓存。DescribeTable 信息缺失缺少部分大小估计信息IndexSizeBytes与ItemCount缺失TableSizeBytes可用以及部分关于表上索引的信息。PartiQL 语法SQL 风格 SELECT/UPDATE/INSERT/DELETE 表达式及ExecuteStatement、BatchExecuteStatement、ExecuteTransaction操作尚未支持。需要 SQL 风格语法的用户可考虑改用 ScyllaDB 的 CQL 协议DynamoDB 2020 年 11 月加入。CloudWatch Contributor InsightsDescribeContributorInsights、ListContributorInsights、UpdateContributorInsights尚不支持。ScyllaDB 有获取同类信息的其他方式例如哪些 item 被访问最频繁。导出到 S3DescribeExport、ExportTableToPointInTime、ListExports不受支持DynamoDB 2020 年 11 月加入。从 S3 导入ImportTable、DescribeImport、ListImports不受支持DynamoDB 2022 年 8 月加入。TableClass 表选项在多种存储方案间按成本/性能选择的功能不受支持所有 Alternator 表存储方式相同DynamoDB 2021 年 12 月加入。DeletionProtectionEnabled禁止删除表的表选项不受支持DynamoDB 2023 年 3 月加入。WarmThroughput检查或保证数据库已预热到可处理特定吞吐的表选项不受支持DynamoDB 2024 年 11 月加入。MultiRegionConsistency用于在全局多区域表上实现一致读的表选项不受支持DynamoDB 2024 年 12 月以预览版加入。GSI 多属性复合键不受支持DynamoDB 2025 年 11 月加入。这些未实现功能在代码层面同样可见例如事务相关 API 在 alternator/executor.cc 中对应实现会直接返回api_error而 TTL 到期删除由独立的 alternator/ttl.cc 模块驱动对应scylla_expiration_items_deleted等指标。迁移决策速查读这一节就够了针对 DynamoDB 用户迁移到 ScyllaDB Alternator可对照以下决策树工作负载是否含 RMW读改写无 → 选forbid_rmw或only_rmw_uses_lwt获得最快纯写性能有但只作用于不同 item →only_rmw_uses_lwt有且可能并发作用于同一 item → 必须always_use_lwt或接受unsafe_rmw的风险但不推荐。是否需要强认证与细粒度授权→ 配置alternator_enforce_authorization先用alternator_warn_authorizationtrue灰度确认scylla_alternator_authentication_failures/scylla_alternator_authorization_failures不再增长后再强制权限用 CQLGRANTSELECT/MODIFY/CREATE/DROP/ALTER授予角色。是否依赖 DynamoDB 流事件语义→ 需要精确 INSERT/MODIFY 区分或静默 no-op 时启用alternator_streams_increased_compatibility代价写走 LWT。是否需要事务、PartiQL、备份/导入导出、全局表控制、Kinesis、DAX 等未实现功能→ 若强依赖需评估替代方案CQL、快照/ScyllaDB Manager、多 DC 复制等。负载均衡自行搭建 LB 或使用客户端侧负载均衡并可用/与/localnodes做节点发现与健康检查。核心配置项汇总均可在 conf/scylla.yaml 及源码配置模块中找到对应项配置项默认值作用--alternator-write-isolation必须显式设置默认写入隔离策略always_use_lwt/forbid_rmw/only_rmw_uses_lwt/unsafe_rmwalternator_enforce_authorizationfalse是否强制认证与授权alternator_warn_authorizationfalse认证/授权失败是否计数并输出 WARN 日志--alternator-ttl-period-in-seconds8640024 小时TTL 到期删除延迟alternator_max_items_in_batch_write100单次 BatchWriteItem 的 item 上限alternator_describe_table_info_cache_validity_in_seconds216006 小时DescribeTable 统计信息缓存有效期alternator_streams_increased_compatibilityfalse流事件是否强制读前像以获得精确 INSERT/MODIFY 与静默 no-op--alternator-encryption-optionsrequire_client_auth视配置是否启用 mTLS 认证true强制 /optional可选【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表