从redis切换到Mysql。好主意?
我们正在使用Rails为餐馆构建SaaS后端。我们直接与POS机集成,因此每个POS机都会不断发送客户订单,我们会将这些订单存储起来以备日后处理。我们在大约1000个地点进行POS集成,每月向我们发送大约300万个客户订单。 对于这个写得很重的应用程序,我们将所有订单存储在redis中,它工作得很好。我们正以惊人的速度增长,我们不断增加新的餐厅,数百个地点不断向我们发送大量数据。但有一个问题——redis每个月都会耗尽内存!作为一个例子,所有不需要在内存中的东西都在内存中 这就是我们考虑切换到mysql的原因。因为我们真的不需要将所有数据都保存在内存中。以下是当前redis数据库的编号:从redis切换到Mysql。好主意?,mysql,ruby-on-rails,redis,nosql,Mysql,Ruby On Rails,Redis,Nosql,我们正在使用Rails为餐馆构建SaaS后端。我们直接与POS机集成,因此每个POS机都会不断发送客户订单,我们会将这些订单存储起来以备日后处理。我们在大约1000个地点进行POS集成,每月向我们发送大约300万个客户订单。 对于这个写得很重的应用程序,我们将所有订单存储在redis中,它工作得很好。我们正以惊人的速度增长,我们不断增加新的餐厅,数百个地点不断向我们发送大量数据。但有一个问题——redis每个月都会耗尽内存!作为一个例子,所有不需要在内存中的东西都在内存中 这就是我们考虑切换到m
used_memory_human:39.83G
dbsize: 34706870
以下是我们在redis中存储为哈希的内容:
id - integer
location_id - integer
stored_at - timestamp
token - string
transaction_no - integer
menu_items - string(comma seprated list of all menu items that customer ordered along with their price & Qty)
order_amount - decimal
order_subtotal_amount - decimal
order_amount_payable - decimal
order_datetime - timestamp
employee_id - integer
employee_name - string
pos_type - string
post_version - string
restaurant_id - integer
因此,请就以下方面寻求一些建议:
- 如果mysql(或任何其他传统数据库)就足够了,那么您首先为什么选择Redis
- “我们储存以备日后处理”是含糊不清的。你能详细说明一下吗?我假设,后面的处理是一种分析活动,对于这种活动来说,延迟并不真正重要,只有吞吐量才重要,对吗?如果真是这样的话,Redis是一个滥杀滥伤,你不觉得吗 你考虑在把数据压缩到ReIIS之前压缩数据吗?< /LI>
请始终记住,大多数NoSQL解决方案(包括Redis)都是快速的,因为它们以酸性特性换取速度。但就你的情况而言,据我所知,酸性物质的性质更为重要。网络上的数据肯定会增长。任何长期项目都应该预见到这一点,并制定扩展策略 随着数据量或通信量的增加,您会发现几乎每一个数量级的增长都需要对体系结构进行更改来处理。也许你可以领先一点,但不是永远。你也无法提前预测瓶颈会在哪里 通常情况下,一小部分数据对应用程序的每分钟工作都很重要,您可以将该子集保存在Redis中,以利用当前代码。然后,其余的数据可以在另一个数据存储中使用,访问速度可能会慢一点,但处理增长要容易得多 您可以废弃当前代码,将所有内容移动到MySQL或其他数据存储中,但要记住两件事:
- 没有一个数据库会允许您忽略扩展策略。您可以使用MySQL、PostgreSQL、MongoDB、Hadoop或其他任何工具,但仍然存在数据增长速度快于单个服务器上单个数据库所能处理的问题
- 出于更高效的开发或操作的内部原因,从头重写应用程序通常不划算(请阅读)
我认为MySQL是一个不错的选择,我相信它能够处理您的数据。我经常与客户一起工作,他们在MySQL中保存了数TB的数据,并且每秒处理数万个事务。但是,由于您没有提供任何有关数据使用的详细信息,我无法就MySQL是否是最佳选择发表意见。例如,Hadoop可能具有优势。随着Redis即将推出的3.0,集群功能将可以投入生产。请看一看以获得概述。这对不断增长的数据量没有直接帮助,但我认为这会使您的设置更容易进行缩放/分片
你还可以考虑将“旧”数据从ReDIS移到另一个系统,例如在ReISIS河的帮助下进行弹性搜索: