Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySql到NoSql 我现在有了Mysql_Mysql_Mongodb_Nosql - Fatal编程技术网

从MySql到NoSql 我现在有了Mysql

从MySql到NoSql 我现在有了Mysql,mysql,mongodb,nosql,Mysql,Mongodb,Nosql,这是我的数据库: 我经常使用边界框按位置搜索用户 还有两个表:用户标签和标签。整个数据库大小约为1 Gb 我已经用这些表实现了一个任意标记系统,这样当用户想要使用尚未创建的标记时,这个标记就会插入到标记表中 我还通过标签搜索用户 基准 除了主键上的索引外,我在这个数据库中没有索引 正如您所看到的,有很多插件,它们需要很多时间 这里的主要问题是耗时的插入和更新 使用标记创建新事件(~150ms): 更新事件(~200ms): 此解决方案中我不喜欢的内容: 当我创建新用户时,我会在3个表中插入

这是我的数据库:

我经常使用边界框按位置搜索用户

还有两个表:用户标签和标签。整个数据库大小约为1 Gb

我已经用这些表实现了一个任意标记系统,这样当用户想要使用尚未创建的标记时,这个标记就会插入到标记表中

我还通过标签搜索用户

基准

除了主键上的索引外,我在这个数据库中没有索引

正如您所看到的,有很多插件,它们需要很多时间

这里的主要问题是耗时的插入和更新

使用标记创建新事件(~150ms):

更新事件(~200ms):

此解决方案中我不喜欢的内容:

  • 当我创建新用户时,我会在3个表中插入以将用户与其标记链接起来
  • 当更新用户信息时,我还需要做3次更新和1次删除,或者在用户更改标签时插入
  • 按标签搜索用户会变得非常混乱(复杂查询)()
  • 使用NoSql我能得到什么 我想使用面向文档的数据库。那么我只需要一个集合:

    {
    "name": "Dan",
    "lat": 60
    "lon": 30
    "tags":["football", "fishing"]  
    }
    
    我将能够在标签latlon上设置索引,以加快搜索速度

    我的问题
  • 我应该切换到NoSql还是可以改进我当前的实现。或者可能切换到不同的RDBMS
  • 如果我应该切换:在这种情况下,哪种NoSql数据库是最好的
  • 如果我应该切换到MongoDb:它是否足够可靠和成熟?因为我读过很多关于人们离开MongoDb的帖子。例如:

  • 这两种技术都可能解决您的问题。有些场景使用RDBMS更容易处理,而另一些场景则使用更专业的数据库。这取决于您的需求、经验和个人偏好的细节

    @mvp对“SQL的便利性”发表了评论。就我个人而言,我觉得SQL是一个很大的难题,因为面向对象和SQL不容易映射。人们经常使用他们的ORM庞然大物,我发现这是一种反模式——ORM代码的大小很可能是整个应用程序代码的50倍以上,因此有些东西是可疑的。但这只是我的观点,SQL仍然可能是最常见的数据存储

    就我个人而言,我觉得您的问题很好地映射到MongoDB,因为

    • 它具有地理索引并支持各种地理查询
    • 如果您需要的话,创建简单的标记是非常容易的
    • 这很容易,处理几GB的数据也很容易
    • 这很容易管理。我不需要干涉
      innodb\u buffer\u pool\u size
      或其他类似规模的事情
    • 连接被高估了。连接是必需的,因为您要将属于一起的数据拆分成表。如果您想找到诸如“喜欢足球和生活在foo中的用户也喜欢”之类的问题的答案,聚合框架和缓存比大型连接更简单、更具可扩展性
    如果我是你的话,我会坐下来休息一两天,让它转一转:你有一个大小合理的数据集,这样你就可以用真实世界的数据进行测试,只需更改几个查询就应该很容易了。这会很有趣,你会直接感受到好的一面和坏的一面


    顺便说一句,reddit上的三篇文章互相引用:pastebin上的“不要使用MongoDB”、news.ycombinator.com上的Eliot Horowitz的回答以及“MongoDB的故事是一个骗局”,因此,不,MongoDB不仅仅是随机崩溃,还有无数的bug。但是,当然,它不是一颗能神奇地消除缩放问题的银弹。

    嗨,它是~1GB。但我正在考虑未来的增长。1GB算不了什么。你最好还是坚持使用MySQL。如果您有1TB,那将是另一个问题,考虑NoSQL将是合适的。是的,您的大小是正确的。但是,关于无模式,您会怎么说呢?因此,在更新和创建时,我只需要在一个集合中进行写入或更新(这是关于我的任意标记系统)?NoSql将加速这一部分。NoSql是一种非规范化。加快一种查询类型的速度可能会更好。但它会使其他一些查询(尤其是连接)变慢,甚至几乎不可能。但是您可以在一个文档中嵌入多个实体(就像我使用标记所做的那样)。或者,如果我还有一个名为Events的表,它将包含用户创建的事件。在这个表中,我将有一个athor_id列。若我需要按作者查找所有事件,我只需要一个查询,其中author\u id==user\u id。我只需再查询一次数据库。我会尝试一下)我还在寻找另一个选项:你们知道db有地理索引,并像mongo一样提供灵活性吗?只是为了与之比较。CouchDB有一个插件。维基百科上有一个较长的列表,但我没有使用其中任何一个:似乎mongo是唯一的选择。根据你的回答,我知道你已经使用mongo好几次了。你在使用它的过程中遇到过什么严重的问题吗?没有。有一些注意事项需要注意,但我想这对于任何数据存储都是正确的。如果不小心(磁盘和RAM),它可能会消耗大量内存,释放空间也很棘手,但除此之外,一切都很有魅力。