YDB中已有二级索引是否支持sync与async类型互相转换
YDB已创建二级索引的同步/异步类型转换问题解答
核心结论
YDB不支持对已存在的二级索引做async(异步)与sync(同步)类型的原地转换,无论是异步索引转同步,还是你当前场景下的同步索引转异步,都无法通过修改现有索引属性的方式直接完成。
对应场景的操作方案
你当前建表时定义的是名为idx_user_chat_posted的全局同步索引,如果要将其改为异步索引,只能通过新建替换的方式操作,步骤如下:
- 基于相同的索引字段(
user_id, chat_id, posted_at)新建一个全局异步二级索引,注意不要和现有索引重名 - 等待新索引完成全量数据回填,构建过程不会阻塞原表的正常读写
- 确认新异步索引可正常提供查询服务后,删除原有的同步索引
- 如果业务代码硬编码依赖原索引名,可在删除旧索引后将新索引重命名为原名称(需使用支持索引重命名的YDB版本)
附:原建表YQL语句
create table messages ( chat_id uint64, user_id uint64, posted_at uint64, modifed_at Datetime, message_text Utf8, message_media Json, views_cnt Uint64, index idx_user_chat_posted global sync on (user_id, chat_id, posted_at), primary key(chat_id, posted_at, user_id) )
注意:同步索引和异步索引的特性差异需要提前评估:同步索引在主表写入时会同步更新索引表,写入成功即保证索引数据一致,写入延迟相对更高;异步索引的更新由后台任务异步执行,主表写入后存在毫秒到秒级的索引同步延迟,写入性能更好但短时间内可能存在索引查询结果与主表不一致的情况。
内容的提问来源于stack exchange,提问作者myaut
相关产品推荐
相关产品推荐

