【发布时间】:2013-01-24 00:53:52
【问题描述】:
我现在用 Mysql 得到了什么
这是我的数据库:
我经常使用边界框按位置搜索用户。
还有两个表:user_tag 和 tags。整体数据库大小约为 1 Gb。
我已经用这些表实现了一个任意标签系统,所以当用户想要使用尚未创建的标签时,这个标签被插入到标签表中。
我也通过标签搜索用户。
基准测试
除了主键上的索引之外,我在这个数据库中没有索引。
如您所见,插入内容很多,而且需要很长时间。
这里的主要问题是耗时的插入和更新。
使用标签创建新事件(~150ms):
更新事件(~200ms):
我不喜欢这个解决方案:
- 当我创建新用户时,我会在 3 个表中插入以将用户与其标签链接起来。
- 在更新用户信息时,我还需要在用户更改标签时进行 3 次更新和 1 次删除或插入。
- 按标签搜索用户变得非常混乱(复杂查询)(How to implement tag system)
我可以使用 NoSql 获得什么
我想使用面向文档的数据库。那么我只需要一个集合:
{
"name": "Dan",
"lat": 60
"lon": 30
"tags":["football", "fishing"]
}
我将能够在 tags 和 lat 和 lon 上设置索引以加快搜索速度。
我的问题
- 我应该切换到 NoSql 还是我可以以某种方式改进我当前的实现。或者可能切换到不同的 RDBMS?
- 如果我应该切换:在这种情况下哪个 NoSql 数据库是最好的?
- 如果我应该切换到 MongoDb:它是否足够可靠和成熟?因为我读过很多关于人们离开 MongoDb 的帖子。例如:http://www.reddit.com/search?q=mongodb
【问题讨论】:
-
嗨,它是 ~1GB。但我正在考虑未来的增长。
-
1GB 不算什么。你最好坚持使用 MySQL。如果你有 1TB,那将是不同的问题,考虑 NoSQL 是合适的。
-
是的,你说得对。但是您对无模式有何看法,以便在更新和创建时我只需要在一个集合中进行写入或更新(这是关于我的任意标签系统)? NoSql 会加快这部分的速度。
-
NoSQL 是一种非规范化。加快一种查询类型可能会很好。但这会使其他一些查询(尤其是联接)变慢甚至几乎不可能。
-
是的。但是您可以在一个文档中嵌入多个实体(就像我对标签所做的那样)。或者例如,如果我将有一个名为 Events 的表,它将包含用户创建的事件。在这张表中,我将有 athor_id 列。如果我需要按作者查找所有事件,我只需要一个查询,其中 author_id == user_id。我将再对数据库进行一次查询。