草庐IT

mysql - 从redis 切换到Mysql。好主意?

coder 2023-07-18 原文

我们正在使用 Rails 为餐厅构建 SaaS 后端。我们直接与 POS 集成,因此每个 POS 不断发送我们存储的客户订单以供以后处理。我们在大约 1,000 个地点进行了这种 POS 集成,每月向我们发送大约 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

因此,寻求一些建议:

  1. 从 redis 迁移到 mysql 是个好主意吗?从长远来看,这将如何影响我们,因为我们需要不断更新我们的索引和分区方案以满足巨大的需求。

  2. 除了 Redis 之外,还有哪些其他数据库(关系型或非关系型)适合此用例?

  3. 或者我们都错了,因为redis就是为存储这种类型的数据而生的。所以,我们只是继续使用 Redis 并每月升级我们的机器?

最佳答案

Web 上的数据必然会增长。任何长期项目都应该预见到这一点,并制定扩展策略。

随着您的数据量或流量的增加,您会发现几乎每个数量级的增长都需要更改您的架构来处理它。也许你可以领先一点,但不是永远。而且您无法提前很长时间预测瓶颈在哪里。

您的数据的一小部分对于您应用的每分钟工作都很重要,这是很常见的,您可以将此子集保留在 Redis 中以利用您当前的代码。然后其余数据可以在另一个数据存储中使用,访问速度可能会慢一些,但更容易处理增长。

您可以废弃当前代码并将所有内容移至 MySQL 或其他数据存储,但请记住两点:

  • 没有任何数据库可以让您忽略扩展策略。您可以使用 MySQL、PostgreSQL、MongoDB、Hadoop 或其他任何工具,但您仍然会遇到数据增长速度超过单个服务器上的单个数据库可以处理的问题。

  • 出于更高效的开发或运营的内部原因,从头开始重写您的应用程序通常不符合成本效益(阅读 Things You Should Never Do, Part I by Joel Spolsky)。

我建议保留您的 Redis 应用,但尝试将历史数据移动到另一个数据存储。

我认为 MySQL 是一个不错的选择,我相信它能够处理您的数据。我经常与客户合作,他们在 MySQL 中保存数 TB 的数据,每秒处理数万个事务。但是由于您没有提供有关数据使用情况的任何详细信息,因此我无法就 MySQL 是否是最佳选择发表意见。例如,Hadoop 可能具有优势。

关于mysql - 从redis 切换到Mysql。好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452283/

有关mysql - 从redis 切换到Mysql。好主意?的更多相关文章

  1. ruby-on-rails - Ruby on Rails with Haml - 如何从 erb 切换 - 2

    我正在从erb文件切换到HAML。我将hamlgem添加到我的系统中。我创建了app/views/layouts/application.html.haml文件。我应该只删除application.html.erb文件吗?此外,仍然有/public/index.html文件被呈现为默认页面。我想创建自己的默认index.html.haml页面。我应该把它放在哪里以及如何使系统呈现该文件而不是默认索引文件?谢谢! 最佳答案 是的,您可以删除任何已转换为HAML的View的ERB版本。至于你的另一个问题,删除public/index/h

  2. 通过 MacPorts 的 RubyGems 是个好主意吗? - 2

    从MB升级到新的MBP后,Apple的迁移助手没有移动我的gem。我这次是通过macports安装ruby​​gems,希望在下次升级时避免这种情况。有什么我应该注意的陷阱吗? 最佳答案 如果你想把你的gems安装在你的主目录中(在传输过程中应该复制过来,作为一个附带的好处,会让你以你自己的身份运行geminstall,而不是root),将gemhome:键设置为您在~/.gemrc中的主目录中的路径. 关于通过MacPorts的RubyGems是个好主意吗?,我们在StackOverf

  3. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  4. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  5. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  6. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  7. ruby - 使用 ruby​​ 进行套接字编程是个好主意吗? - 2

    我选择的语言是Ruby,但因为Twitter,我知道Ruby不能处理很多请求。将它用于套接字开发是个好主意吗?或者我应该像Twitter开发人员那样使用像erlang或haskell或scala这样的函数式语言吗? 最佳答案 我工作的公司使用Ruby作为我们的网站。到目前为止,我们已经处理了超过34,000,000,000次点击。我们每天处理大约10,000,000次点击没有问题。每天的点击量峰值已超过40,000,000次。可扩展性取决于很多因素。例如,与读取相比,我们的数据库执行的写入比例高得不成比例。虽然大多数网站执行大约90

  8. ruby-on-rails - 语言环境不在 Rails 4 中切换 - 2

    我的Rails应用程序在rails4.0.2上,我在使用locale变量和params[:locale]切换翻译时遇到问题官方railsguide.我在mysite有一个单页网站.我的国际化路线:scope"(:locale)",locale:/en|de/do#myrouteshereend我的应用程序Controllerbefore_filter:set_localedefset_localeI18n.locale=params[:locale]||I18n.default_locale#Rails.application.routes.default_url_options[:l

  9. jquery - 在 Rails 中从原型(prototype)切换到 jquery,助手呢? - 2

    我目前从prototype切换到jquery主要是为了支持简单的ajax文件上传。我使用:https://github.com/indirect/jquery-rails95%的javascript代码是由railshelper编写的,例如:-remote_function-render:updatedo|page|-page.replace_html'id',:partial=>'content'-page['form']['name']=something-page.visual_effect:highlight,'head_success'...我知道我必须为Jquery重写5%

  10. Centos7-yum安装mysql-修改密码-无密码登录-安全配置 - 2

    目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.

随机推荐