从 Sql 迁移到 NoSql 数据库的限制

Posted

技术标签:

【中文标题】从 Sql 迁移到 NoSql 数据库的限制【英文标题】:Limits to move from Sql to NoSql Database 【发布时间】:2014-01-18 17:04:12 【问题描述】:

我们在当前的 mysql 数据库中面临与性能相关的问题。我们的应用程序在几张约 20 张桌子上相当繁重。我们在此表上运行大量聚合查询以及写入。我们的大多数团队都是开发人员,我们没有 dba 访问权限,这可能有助于重新调整我们当前的数据库并加快工作速度。

迁移到 NoSql 是一种选择。但是认真思考在

方面的更高限制是什么 卷(当前每天的卷约为 50GB) 结构化数据还是原始数据? (结构化数据) 数据库上的 IO 统计信息 -(当前速率为 60 KB/秒) 记录写入 -(现在 3000 行/秒)

问题出现

50GB 足够高可以考虑 NoSql 吗?一些文档建议超过 TB 数据应该是原始数据,可以进一步处理以获得结构化并在应用程序中使用 MySql 以 3000 行/秒的速度向外扩展,不确定 MySql 是否可以进一步调整

HBase 似乎对分析应用很有前景。

希望获得一些关于 RDBMS 限制的指南,可以考虑迁移到 NoSQL

【问题讨论】:

仅在 MySQL 上每天 50GB 听起来令人印象深刻,甚至在没有 DBA 的情况下更是如此。也许您可以先告诉我们更多关于您当前的基础设施的信息。像 HBase 这样的 NoSQL 数据库可能会对您有很大帮助,特别是在可扩展性方面(这似乎是您主要关心的问题),但它们并非没有自己的一系列缺点、限制和开销,在做出这样的重要选择时要小心.忘记关于卷/存储的建议吧,有很多非常小的 NoSQL 数据库可以在生产环境中完美运行。 There is no such thing as NoSQL。只有许多相互没有共同点的独立的新数据库技术。 @RubénMoraleda,当前的基础设施包括,MySql DB 分为三种三种表 1. 原始数据的几个表(高插入 @ ~3000 行/秒) 2. 约 500 个表用于每分钟更新/rollups (inserts are @ 4000 rows/min) 3. ~100个表保存关系(映射) 数据库由分钟聚合器、UI、~100个定义组件访问(读取)。希望这能提供足够的洞察力 @Philipp,我了解,正在寻求指导以根据我的要求选择一种这样的新数据库技术 【参考方案1】:

这是一个如此广泛的话题,所以不要相信有任何“正确”的答案,但也许一些一般性建议会有所帮助:

我认为您应该从为问题选择正确工具的角度来考虑这一挑战。所有数据库都有其优点和缺点,在某些挑战中,最好的方法是使用entire toolbox 来完成工作。

请注意,将您的数据(甚至只是其中的一部分)移动到不同的数据存储区并非易事。借此机会在实施之前重新考虑您的数据模型。

完成这项工作还应考虑更多要求,例如您的增长计划。看起来你正处于这个十字路口,因为你最初的假设->选择不再与现实相提并论。如果您想在下次在同一个地方时延迟,您应该利用这个机会这样做。

最后请记住,只有在您对所有捕获的数据执行某些操作后才能真正完成这项工作 - 否则我建议您使用无限可扩展的 write-to-/dev/null 设计模式;) 换一种说法,除非您的数据是只写的,否则您需要确保您选择的任何 SQL/NoSQL/NewSQL/其他数据存储也可以在您的用例可接受的时间范围内为您提供数据/信息/知识。

【讨论】:

【参考方案2】:

考虑到您当前的基础架构,这可能值得请记住,这将是一项艰巨的任务,因为您'需要重新设计整个流程。 HBase 可以为您提供帮助,因为它具有一些简洁的功能,例如实时计数器(在某些情况下消除了定期汇总的需要)或每个客户端缓冲(可以让您扩展到每秒超过 100k 的写入),但是,请注意它不能像查询关系数据库一样被查询,因此,您需要仔细规划它以使其适合您。

看来您的主要问题在于原始数据写入,当然,您绝对可以依赖 HBase,然后每隔 X 分钟进行一次汇总,以将数据存储在您的 RDBMS 中,以便可以像往常一样对其进行查询。但是考虑到你每分钟都在做,这是一个非常短的间隔,你为什么不把数据保存在内存中,每分钟刷新一次汇总表呢?当然,您可能会丢失数据,但我不知道批评家对您丢失一分钟数据的态度如何,仅此一项就可以帮助您很多。

无论如何,我能想到的最佳建议是:阅读一本书,首先了解 HBase 的工作原理,深入了解其优缺点,然后考虑它如何满足您的特定需求。这一点至关重要,因为一个好的实施将决定它是成功还是彻底失败。

一些资源:

HBase: The Definitive Guide

HBase Administration Cookbook

HBase Reference guide(免费)

【讨论】:

好主意。要存储的数据是结构化/处理的。寻找能够在一分钟内承受约 700000 次记录插入的数据存储。每条记录大小为 50 字节。不确定MySQL会应付。一分钟内数据下降没问题

以上是关于从 Sql 迁移到 NoSql 数据库的限制的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server DB 迁移到 MongoDB:关于是嵌入还是引用的问题

关于数据库更新/插入速率限制的一些查询(基于 SQL 或基于 NoSQL)

NoSQL是啥意思

TiDB 的数据迁移工具现已开源

基于磁盘的基于文档的存储

从 SQL Azure 迁移到 SQL Server