我现在用 Mysql 得到了什么
这是我的数据库:
我使用边界框按位置搜索用户。
还有两个表:user_tag 和 tags。整个数据库大小约为1 Gb。
我已经用这些表实现了一个任意标签系统,所以当用户想要使用尚未创建的标签时,这个标签被插入到标签表中。
我还按标签搜索用户。
基准
除了主键上的索引外,我在这个数据库中没有索引。
正如你所看到的,有很多插入,它们需要很长时间。
这里的主要问题是耗时的插入和更新。
使用标签创建新事件(~150ms):
更新事件(~200ms):
我不喜欢这个解决方案:
- 当我创建新用户时,我会插入 3 个表以将用户与他的标签链接起来。
- 更新用户信息时,我还需要在用户更改标签时进行 3 次更新和 1 次删除或插入。
- 通过标签搜索用户变得非常混乱(复杂查询)(如何实现标签系统)
我能用 NoSql 得到什么
我想使用面向文档的数据库。然后我只需要一个集合:
{
"name": "Dan",
"lat": 60
"lon": 30
"tags":["football", "fishing"]
}
我将能够在标签和lat和lon上设置索引以加快搜索速度。
我的问题
- 我应该切换到 NoSql 还是我可以以某种方式改进我当前的实现。或者也许切换到不同的RDBMS?
- 如果我应该切换:在这种情况下哪个 NoSql 数据库是最好的?
- 如果我应该切换到MongoDb:它是否足够可靠和成熟?因为我读过很多关于人们离开MongoDb的帖子。例如:http ://www.reddit.com/search?q=mongodb