【发布时间】:2011-06-13 13:44:53
【问题描述】:
我正在为我的项目开发问题记录器,但在分析记录的数据时遇到了问题。问题是该表增长得非常快,并且用于搜索表中数据的过滤器几乎在所有方面都可能有所不同,因为我们并不总是对相同的字段感兴趣。所以索引并不是一个真正的选择。
该表当前位于 MySQL 数据库中,结构如下:
CREATE TABLE `log_issues` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`id_user` int(11) DEFAULT NULL,
`type` varchar(50) NOT NULL,
`title` varchar(100) NOT NULL DEFAULT '',
`message` mediumtext NOT NULL,
`debug` mediumtext,
`duration` float DEFAULT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `date` (`date`,`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
现在我的问题是,当该表有数百万个条目时,我如何在该表上运行查询,而不必永远等待结果?例如,仅过滤用户的 id 就需要很长时间。我知道我可以在 id_user 部分放置一个索引,但我可能想将它与其他字段结合起来,或者由于查看这些日志的工具生成查询的方式,它可能无法正确利用索引。
我认为使用 MongoDB 或其他 NoSQL 数据库可能会更好,但我对它们没有任何经验。基于文档的数据库是否更容易过滤没有索引的大型数据集,或者无论数据库如何,我都会遇到这个问题?
总结一下:
我有一个包含大量数据的表,无法使用索引(至少在需要排序的情况下),我需要在不等待超过 10 秒的情况下获得结果。我可以使用哪些技术?
任何建议将不胜感激。
【问题讨论】:
-
索引...索引...索引...还是索引!!! (使用索引不会永远过滤用户的 id)
-
正如我所说,我知道这一点,但查询并不总是像过滤用户 id 那样简单。我需要更好的东西,如果它存在的话。
标签: mysql mongodb performance database nosql