是否可以在Real-time Sphinx index
中更新 一个 parallel
?
为了澄清,我有一个RT索引,例如RT1。要更新RT1,我想拥有两个甚至更多个更新器。
例如,如果队列中有100个文件,我想在索引中并行添加2个文件。 Sphinx能够进行多线程处理还是Sphinx不是线程安全的?
主要问题是,当多个文件同时添加到同一索引中时,Sphinx是否会自身损坏?我在文档中找不到答案。
请紧记,我multithread
script
正在向Sphinx RT-index添加文件。因此,多个文件将同时(并行)添加到一个索引中。
版本:
Sphinx 2.2.9-id64-release (rel22-r5006)
配置:
index_name
{
type = rt
path = /mnt/data001/index_name
rt_field = FileName
rt_field = FileExtension
rt_field = FileContent
rt_field = FileTags
rt_attr_uint = FileReference
rt_attr_uint = FileSize
rt_attr_uint = LastModified
rt_attr_uint = LastModifiedYear
rt_attr_uint = LastModifiedMonth
rt_attr_uint = LastModifiedDay
rt_attr_string = FileContent
rt_mem_limit = 1024M
charset_table = A..Z, a..z, 0..9, U+E1, U+E9, U+FA
ondisk_attrs = pool
}
searchd
{
listen = 9306:mysql41
log = /var/log/sphinxsearch/searchd.log
read_timeout = 5
max_children = 30
pid_file = /var/run/searchd.pid
max_packet_size = 128M
binlog_path = /mnt/data001
}
重要的是,该字符串只能由A..Z,a..z,0..9,U + E1,U + E9和U + FA组成。 (我已经验证了)
测试: 为了进行测试,我在Ubuntu上使用了C ++应用程序,并通过MySQL连接器与Sphinx进行了通信
答案 0 :(得分:0)
应该没问题,它不会破坏您的索引,也不应使守护程序崩溃。 与一些测试相关的答案-https://stackoverflow.com/a/52961820/591867
答案 1 :(得分:0)
我已经验证了此问题,并被警告!不能并行更新索引!我的索引自身部分损坏(索引和守护程序都没有崩溃)。您不会一眼看到此问题。我已经通过插入并检查插入的值(通过在插入后直接选择它)来验证了这一点,并且返回的值并不总是与插入的值匹配,如下所述。
作为说明示例。我插入了test
,但从选择中又回到了t^463t
(执行插入操作之后)。
对于此测试,我插入了1.000.000
个文档,这些文档散布在two-threaded
个应用程序中,其中43.372
个文档具有上述问题。当然,这取决于并行插入文档的确切比率,但是 Sphinx似乎不是线程安全的 。 (假设使用更多线程并行插入文档时,甚至会有更多文档损坏)
有时我还注意到,来自多个文档的单词是串联在一起的(那些文档恰好在同一时刻插入)。