我们正在为使用Rails的餐厅构建SaaS后端。我们直接与POS集成,因此每个POS都会不断发送存储的客户订单以供以后处理。我们的POS集成在大约1000个地点进行,每月向我们发送大约300万个单独的客户订单。对于这个写繁重的应用程序,我们将所有订单存储在redis中,它的运行效果非常好。我们正以惊人的速度增长,我们不断在数百个地点添加新餐厅,这些餐厅不断向我们发送大量数据。除非有一个问题-Redis每月都会耗尽内存!就像,所有不必在内存中的东西都在内存中。
这就是为什么我们打算切换到mysql。因为我们确实不需要将所有数据保留在内存中。这是我们当前Redis数据库的编号:
used_memory_human:39.83G
dbsize: 34706870
这是我们在redis中存储为Hash的内容:
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
因此,在以下方面寻求一些建议:
从redis迁移到mysql是个好主意?从长远来看,它将如何影响我们,因为我们将需要不断更新索引和分区方案,以满足巨大的需求。
除redis外,还有哪些其他数据库(关系数据库或非关系数据库)适合该用例?
或我们都错了,因为Redis是用于存储此类数据的。因此,我们只是每月继续使用Redis和升级我们的机器?
网络上的数据势必会增长。任何长期项目都应该对此有所预见,并制定扩展策略。
随着数据量或流量量的增加,您会发现大约每个数量级的增长都需要对体系结构进行更改才能处理。也许您可以领先一步,但并非永远。而且,您无法预测瓶颈将提前到哪里。
一小部分数据对于应用程序的日常工作很重要,这很常见,您可以将此子集保留在Redis中以利用当前代码。然后,其余数据可以在另一个数据存储中使用,访问速度可能稍慢,但处理增长要容易得多。
您可以取消当前代码,然后将所有内容移至MySQL或另一个数据存储区,但请记住两点:
没有数据库可以让您忽略扩展策略。您可以使用MySQL,PostgreSQL,MongoDB,Hadoop或其他任何方式,但仍然存在数据增长速度快于单个服务器上单个数据库无法处理的问题。
由于开发或运营效率更高的内部原因,从头开始重写应用程序通常不划算(请参阅Joel Spolsky撰写的“您不应该做的事情,第一部分”)。
我建议保留您的Redis应用程序,但尝试将历史数据移动到另一个数据存储中。
我认为MySQL是一个不错的选择,我相信它能够处理您的数据。我定期与客户合作,这些客户将MySQL中的数据保存在TB中,并且每秒处理数万笔事务。但是,由于您尚未提供有关数据使用情况的任何详细信息,因此我无法就MySQL是否是最佳选择提供意见。例如,Hadoop可能具有优势。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句