MySQL还是NoSQL?处理大量数据的推荐方法

MySQL还是NoSQL?处理大量数据的推荐方法,mysql,database,storage,Mysql,Database,Storage,我有一个数据库,它将被大量用户用来存储随机长字符串(最多100个字符)。表列将是:userid、stringid和实际的长字符串 所以它看起来很像这样: Userid和stringid对于每个用户都是唯一的 该应用程序类似于一个简单的待办事项列表应用程序,因此每个用户平均有50个待办事项。 我使用stringid是为了用户能够在任何给定时间删除特定任务 我想这个todo应用程序可能在3年内完成700万个任务,这让我害怕使用MySQL 因此,我的问题是,如果这是使用长字符串处理大量数据的实际推荐

我有一个数据库,它将被大量用户用来存储随机长字符串(最多100个字符)。表列将是:userid、stringid和实际的长字符串

所以它看起来很像这样:

Userid和stringid对于每个用户都是唯一的

该应用程序类似于一个简单的待办事项列表应用程序,因此每个用户平均有50个待办事项。 我使用stringid是为了用户能够在任何给定时间删除特定任务

我想这个todo应用程序可能在3年内完成700万个任务,这让我害怕使用MySQL

因此,我的问题是,如果这是使用长字符串处理大量数据的实际推荐方法(每个新任务都会得到一个新行)?而且MySQL是这种项目的正确数据库解决方案吗?

我还没有体验过大量的数据,我正在努力为遥远的未来保存自己。

这不是“大量”数据的问题(mysql可以处理大量数据,200万行在任何情况下都不是“大量”)

MySql是一个关系数据库。因此,如果您有可以标准化的数据,这些数据分布在多个表中,确保每个数据点只保存一次,那么您应该使用MySql(或Maria,或任何其他关系数据库)


如果您拥有较少的模式数据,并且速度比一致性更重要,那么您可以/应该使用一些NoSql数据库。就我个人而言,我不知道待办事项列表如何从NoSql中获益(在这种情况下并不重要,但我想现在大多数programmig框架对关系数据库的支持比NoSql更好)。

这是一个非常简单的关系用例。我认为这里不需要NoSQL

您提供的表应该可以很好地工作,但是,我个人会质疑是否需要复合主键,因为您将介绍这一点。我可能在stringid上有一个主键,只在所有记录上强制唯一性。而不是跨越userid和stringid的复合主键。然后我会在userid上放置一个常规索引

这样做的原因是,如果您只想通过stringid进行查询(即,对于删除或更新),您不必总是通过两个字段进行查询来利用索引(或者添加必须在stringid和userid上添加单独的索引以支持每个字段的查询,这意味着索引占用了我的内存和磁盘空间)


至于MySQL是否是正确的解决方案,这将由您来确定。我想说,MySQL在处理两个整数id字段上有200万行和2个索引的表时应该没有问题。这是假设您已经分配了足够的内存来保存这些索引。当然,有大量的可用信息E与MySQL一起工作,所以如果你只是想学习,它可能是一个不错的选择。

< P>不管你认为“大量的数据”,现代的DB引擎都被设计来处理很多。“关系还是NoSQL?”问题不在于哪个选项可以支持更多数据。不同的关系型和NoSQL解决方案将以不同的方式处理大量数据,有些方案比其他方案更好

MySQL可以处理数百万条记录,SQLite不能(至少没有那么有效)。Mongo(NoSQL)试图将其集合保存在内存(以及文件系统)中,因此我看到它失败了,在内存有限的服务器上只有不到100万条记录,尽管它提供了切分,这可以帮助它更有效地扩展


底线是:您存储的记录数量不应该影响SQL与NoSQL的决策,该决策应该留给您如何保存和检索数据。听起来您的数据已经规范化了(例如UserID),如果您在删除用户时也希望一致性(TODO项也会被删除)然后我建议使用SQL解决方案。

我假设所有查询都将引用特定的用户ID。我还假设stringid是内部使用的伪值,而不是实际的任务文本(随机字符串)


{userid,stringid}
上使用一个带有复合主键的InnoDB表,由于聚集索引的工作方式,您将获得所需的所有性能。

对于MySQL来说,200万行并不是一个异常大的行数。给出的数字是估计值。或者我应该说700万。700万行并不是“大量的数据”我想你低估了数据库的功能。如果应用程序“繁荣”了怎么办例如,点击了100万用户。如果100万用户点击了50个任务,那就是5000万个不同的行。MySQL在每次登录时搜索特定用户ID的所有任务是否存在性能问题?如果您有适当的索引(索引?),再加上你为什么认为nosql会更快?@ClydeM这就是索引的作用。使用nosql解决方案不会阻止你查询用户记录,那些文档存储也使用索引。@ClydeM我有数亿行的MySQL表。对你来说,这对你来说是个好问题,不是吗o已经并可能要求您彻底更改数据库体系结构(即添加服务器复制、升级硬件等)。我不必担心“如果”的问题当你刚开始的时候的场景。也许你可以围绕你可以合理预期的未来一年左右的流量设置你的服务。谢谢。非常感谢。