微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mysql – 具有大量数据的SQL与NoSQL性能

在我自己的服务器和AWS服务器上进行了多天的研究和多次负载测试后,我决定向社区提问.

我正在开发一个图像跟踪平台.在此平台上,用户可以关注图像和其他图像,这些图像是作为对后续图像的回复而发送的.

基本方案

Example schema

“跟踪”表可在未来12个月内达到1,000,000,000条记录.我们担心,每个用户访问我们的家必须咨询后面的所有照片,并通过他们加入以收集照片显示.
在跟踪表中,不进行DELETE和UPDATE,仅进行INSERTS.

我已经执行了生成虚拟数据的测试,其中Spawner Data Generator在“跟踪”表中放置了1亿条记录.在完成三个必需的JOIN时,我得到了一个非常好的respio时间(或者我认为)~35ms,但是当我执行100个或更多并发查询时,系统运行速度非常慢,甚至需要25秒才能回答.

我开始认为MongoDB至少可以帮助每个用户(文档)有一系列照片跟随(子文档),但其中一个问题是16mb的限制,另一个是带来每个“回复” “(带有字段photo_id的文件).我还试图做一个除了跟踪之外的集合(带有user_id和photo_id的文档)以避免16mb的问题,但仍然存在带来“回复”的问题(我不认为这是一个最佳解决方案,除了我理解对于Relational数据,不使用Nosql.您必须使用适当的工具)

问题:

1 – sql是设计用于进行此类查询还是我对技术的使用不当?

2 – 在这种情况下不应使用MongoDB,因为它依赖于关系数据.我对吗?

3 – 你有什么建议吗?

老实说,我非常关心性能,特别是公寓达到了一排排

Why You Should Never Use MongoDB – Sarah Mei:引起标题极大轰动的利益条款.我已经阅读了有关该文章的几个意见,我变得更加困惑

用于测试的服务器:

第一:

与MariaDB的-AWS免费套餐.

第二:

-cpu:Celeron J1900

-RAM:4GB 1666mhz

-SSD:32 GB

-OS:ubuntu服务器16.04

– 软件:MariaDB

第三:

-cpu:i7 7700

-RAM:16GB 2133mhz

-SSD:512

-OS:Windows 10

– 软件:MariaDB

解决方法:

Is sql designed to make such queries…?

查询喜欢什么?您尚未显示任何疑问.

当您需要针对数百万行优化查询时,您必须非常具体地了解要优化的查询.您可以使用索引或分区或其他技术,但每种优化都会以牺牲其他查询为代价来优化特定查询.

MongoDB should not be used in this case because it relies a lot on relational data. Am I right?

MongoDB 3.2支持$lookup,有点像外连接.但它不可能像sql中的索引连接一样高效.

MongoDB的另一个策略是存储更复杂的文档,所有依赖数据都嵌套在嵌套结构中.这样您就不必进行连接,但它会针对某种数据检索进行优化.

Do you have any recommendations?

我建议您正确调整服务器的大小以适应您将要使用的数据量.

>为它们提供足够的RAM,以便您可以将数据集保存在InnoDB缓冲池中.确保调整MysqL / MariaDB选项以利用系统RAM.
>为他们提供更强大的cpu,可以执行更多并发线程(在您的情况下,顶级cpu仍然是一个4核cpu,HT只有8个线程).毫不奇怪,你的适度cpu被100个并发线程所淹没.

还计划更多地使用缓存.针对大型数据集的查询将非常昂贵.最快的查询可能是您根本不必执行的查询,因为结果已经在缓存中.您需要在应用程序级别进行架构以减少SQL查询负载.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐