
Manticore Search 4.0.2: 完整的列存储支持,自动索引压缩,锁系统改进,伪分片
主要新特性
- 完全支持
Manticore Columnar Library
。之前 Manticore Columnar Library 仅支持普通索引。现在它支持:
- 实时索引中的
INSERT、REPLACE、DELETE、OPTIMIZE - 在复制中
- 在
ALTER 中 - 在
indextool --check 中 - 自动索引压缩 (
#478
)。最终你不必手动或通过定时任务或其他自动化方式调用 OPTIMIZE。Manticore 现在会自动处理。你可以通过
optimize_cutoff
设置默认的压缩阈值。
- 块快照和锁系统改进。这些变化在初看时可能在外部是不可见的,但它们显著改善了许多实时索引中发生的事情的行为。简而言之,之前大多数 Manticore 数据操作严重依赖于锁,现在我们改为使用磁盘块快照。具体来说:
- 读取操作(例如 SELECT、复制)使用快照执行
- 仅更改内部索引结构而不修改模式/文档的操作(例如合并 RAM 段、保存磁盘块、合并磁盘块)使用只读快照执行,并在最后替换现有块
- UPDATE 和 DELETE 针对现有块执行,但在合并可能发生的情况下,写入会被收集,然后应用于新块
- UPDATE 为每个块顺序获取独占锁。合并在进入收集块属性的阶段时获取共享锁。因此在同一时间只有一个(合并或更新)操作可以访问块的属性。
- 当合并进入需要属性的阶段时,它会设置一个特殊标志。当 UPDATE 完成时,它检查该标志,如果已设置,整个更新将存储在一个特殊集合中。最后,当合并完成时,它将应用更新集到新生的磁盘块
- ALTER 通过独占锁运行
- 复制作为常规读取操作运行,但此外在 SST 之前保存属性,并在 SST 期间禁止更新
- ALTER
可以添加/删除全文字段。之前它只能添加/删除属性。
- 🔬 实验性:用于全扫描查询的伪分片 - 允许并行化任何非全文搜索查询。现在你只需启用新选项
searchd.pseudo_sharding
,就可以期待非全文搜索查询的响应时间降低到
CPU cores。请注意,它可能会占用所有现有的 CPU 核心,因此如果你不仅关心延迟,还关心吞吐量 - 请谨慎使用。
次要变化
重大变化
- 新版本可以读取旧索引,但旧版本无法读取 Manticore 4 的索引
- 移除了按 ID 的隐式排序。如果需要,请显式排序
charset_table 的默认值从 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+451, U+451 更改为 non_cjkOPTIMIZE 自动发生。如果你不需要它,请确保在配置文件的 searchd 部分设置 auto_optimize=0- #616
ondisk_attrs_default 已被弃用,现在已被移除 - 对于贡献者:我们现在在 Linux 构建中使用 Clang 编译器,因为根据我们的测试,它可以构建更快的 Manticore Search 和 Manticore Columnar Library
- 如果在搜索查询中未指定
max_matches
,它会隐式更新为新列存储性能所需的最低值。这可能会影响
SHOW META
中的指标
total,但不会影响实际找到的文档数量 total_found。
从 Manticore 3 迁移
- 确保您干净地停止 Manticore 3:
/var/lib/manticore/binlog/ 中不应有 binlog 文件(目录中应仅有 binlog.meta)- 否则,Manticore 4 无法回复 binlogs 的索引将无法运行
- 新版本可以读取旧索引,但旧版本无法读取 Manticore 4 的索引,因此如果您希望能够轻松回滚新版本,请确保进行备份
- 如果您运行的是复制集群,请确保您:
- 首先干净地停止所有节点
- 然后使用
--new-cluster 启动最后停止的节点(在 Linux 中运行工具 manticore_new_cluster)。 - 阅读
重启集群
以获取更多详细信息
错误修复
- 许多复制问题已被修复:
- 696f8649
- 修复了在连接节点上进行 SST 时崩溃;在连接节点写入文件块时添加了 sha1 验证以加快索引加载;在连接节点的索引加载时添加了更改索引文件的轮换;在连接节点上,当活动索引被来自捐赠节点的新索引替换时,添加了索引文件的删除;在捐赠节点添加了发送文件和块的复制日志点
- b296c55a
- 在地址不正确的情况下,JOIN CLUSTER 时崩溃
- 418bf880
- 在大索引的初始复制过程中,连接节点可能会因
ERROR 1064 (42000): invalid GTID, (null) 而失败,捐赠节点在另一个节点连接时可能会变得无响应 - 6fd350d2
- 对于大索引,哈希可能计算错误,这可能导致复制失败
- #615
- 集群重启时复制失败
- #574
-
indextool --help 不显示参数 --rotate - #578
- searchd 在空闲时 CPU 使用率高,约一天后
- #587
- 立即刷新 .meta
- #617
- manticore.json 被清空
- #618
- searchd --stopwait 在 root 下失败。它还修复了 systemctl 行为(之前它显示 ExecStop 失败,并且没有足够长的时间等待 searchd 正常停止)
- #619
- INSERT/REPLACE/DELETE 与 SHOW STATUS。
command_insert、command_replace 和其他显示错误的指标 - #620
- 普通索引的
charset_table 默认值错误 - 8f753688
- 新的磁盘块未被 mlocked
- #607
- 当无法通过名称解析节点时,Manticore 集群节点崩溃
- #623
- 更新索引的复制可能导致未定义状态
- ca03d228
- 索引器在索引具有 json 属性的普通索引源时可能会挂起
- 53c75305
- 修复了 PQ 索引的非等式表达式过滤器
- ccf94e02
- 修复了在 1000 个匹配以上的列表查询中的选择窗口。
SELECT * FROM pq ORDER BY id desc LIMIT 1000 , 100 OPTION max_matches=1100 之前无法正常工作 - a0483fe9
- 对 Manticore 的 HTTPS 请求可能会导致警告,如 "max packet size(8388608) exceeded"
该网站使用cookies。继续使用本网站即表示您同意使用cookies。我接受