• 普通表
普通表是非透析搜索的基本元素。它只能在配置文件中使用[普通模式](../../Creating_a_table/Local_tables.md#Defining-table-schema-in-config-%28Plain mode%29)进行定义,并且不支持实时模式。它通常与源结合使用,从外部存储处理数据,并可以后来附加到实时表。
创建普通表
要创建一个普通表,您需要在配置文件中定义它。CREATE TABLE命令不支持此功能。
以下是普通表配置及其从MySQL数据库获取数据的源的示例:
如何创建普通表
source source {
type = mysql
sql_host = localhost
sql_user = myuser
sql_pass = mypass
sql_db = mydb
sql_query = SELECT id, title, description, category_id from mytable
sql_attr_uint = category_id
sql_field_string = title
}
table tbl {
type = plain
source = source
path = /path/to/table
}👍 您可以使用普通表做什么:
在整数、浮点数、字符串和MVA属性上执行就地更新
更新其
killlist_target
⛔ 您不能使用普通表做什么:
在表构建后插入额外数据
从表中删除数据
在线创建、删除或更改表架构
使用UUID进行自动ID生成(来自外部存储的数据必须包含唯一标识符)
数值属性,包括MVAs,是普通表中唯一可以更新的元素。表中的所有其他数据都是不可变的。如果需要更新或添加新记录,则必须重建表。在重建过程中,现有表保持可用以处理请求,并在新版本准备好时执行称为轮换的过程,将其上线并丢弃旧版本。
普通表构建性能
普通表的索引速度取决于几个因素,包括:
数据源检索速度
硬件规格(如CPU、RAM和磁盘性能)
普通表构建场景
根据需要完全重建
对于小型数据集,最简单的选择是拥有一个普通表,根据需要完全重建。此方法在以下情况下可接受:
表中的数据不如源中的数据新鲜
构建表所需的时间随着数据集的增长而增加
主+增量场景
对于较大的数据集,可以使用普通表代替实时表。主+增量场景涉及:
创建一个较小的表用于增量索引
使用分布式表合并两个表
这种方法允许较大的表不频繁重建,并更频繁地处理来自源的更新。较小的表可以更频繁地重建(例如,每分钟甚至每几秒)。
但是,随着时间的推移,较小表的索引时间会变得过长,要求重建较大的表并清空较小的表。
主+增量架构在这个互动课程中详细解释。
杀死列表的机制和killlist_target指令用于确保当前表中的文档优先于来自其他表的文档。
有关此主题的更多信息,请参见这里。
普通表文件结构
以下表格概述了普通表中使用的各种文件扩展名及其各自的描述:
.spa
以行模式存储文档属性
.spb
以行模式存储blob属性:字符串、MVA、json
.spc
以列模式存储文档属性
.spd
为每个词ID存储匹配的文档ID列表
.sph
存储表头信息
.sphi
存储属性值的直方图
.spi
存储词列表(词ID和指向.spd文件的指针)
.spidx
存储二级索引数据
.spjidx
存储为JSON属性生成的二级索引数据
.spk
存储杀死列表
.spl
锁文件
.spm
存储已被杀死文档的位图
.spp
为每个词ID存储命中列表(即发布、即词出现)
.spt
存储附加数据结构以加速按文档ID的查找
.spe
存储跳跃列表以加速文档列表过滤
.spds
存储文档文本
.tmp*
在index_settings_and_status期间的临时文件
.new.sp*
在轮换之前的普通表的新版本
.old.sp*
在轮换之后的普通表的旧版本
最后更新于