最近我开发了一个软件,它将日志文件从我们的在线生产环境下载到带有MySQL数据库的内部NAS设备,以便我们能够存储更多信息(在线空间很昂贵)。这件事已经运行了两个星期了,所以我们的数据库正在增长: 日志表的数量411 日志条目数48,000,513 约。表格大小:37.32 GB
每小时创建一个不同的logtable(每次超过100,000个条目),这就是为什么我们目前有411个。
我还为它创建了一个搜索界面,使用的索引表包含表名,表中的第一个和最后一个条目,这样在指定搜索日期时,事情就会非常顺利。
然而,当我搜索例如“站点X”没有指定日期范围,必须搜索超过400个表,并且每行包含一个大的XML消息,因此每天都在变慢。
我开始寻找更高级的搜索解决方案并发现它们与Sphinx和Solr,但我似乎无法把事情做对:
我的问题的底线:
我希望我能够澄清我的问题。提前谢谢。
编辑:与此同时,我能够设置Solr并能够搜索它。然而,它创建的索引几乎与原始表的大小相同..所以我想我应该坚持自己的自制搜索引擎..?
答案 0 :(得分:0)
(对solr没有经验,所以无法帮助你)
或者有没有办法用char(32)设置Sphinx作为索引?
Sphinx只需要一个唯一的ID。它实际上不必匹配数据库主键!
获取身份证的几种方法:
制作一个假的!
sql_query_pre = SET @id = 1 sql_query = SELECT @id:= @ id + 1,...
使用哈希
sql_query = SELECT CRC32(uuid),...
虽然http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/可能更好,但在sphinx中与--enable-id64一起使用。碰撞的可能性很小(但不存在)
仅使用部分uuid。取决于如何创建原始文件 - 例如,如果它们具有共同的前缀。
如果使用innodb表存储数据,mysql将为数据创建一个整数id。请参阅http://dev.mysql.com/doc/refman/4.1/en/sorting-rows.html
(Sphinx也有一些技巧可以帮助索引大量的表。配置'文件'实际上可以是一个脚本。这样一来,脚本就可以输出大量非常相似的索引定义。索引,可以有很多'源'。所以一个索引,可以很容易地从多个源表中提取内容。这有帮助,因为虽然sphinx可以有数百个表,但是很多开销,所以可能值得对它们进行分组。每个索引说24个表/源。)