MongoDB、Redis 与 Cassandra 的快速写入、临时行存储解决方案

2024-03-21

我正在构建一个跟踪和验证广告展示次数和点击次数的系统。这意味着有很多插入命令(平均每秒约 90 个,峰值为 250 个)和一些读取操作,但重点是性能并使其速度极快。

该系统目前使用 MongoDB,但从那时起我就开始使用 Cassandra 和 Redis。采用这两种解决方案之一而不是继续使用 MongoDB 是一个好主意吗?为什么或者为什么不?

谢谢


对于这样的收获解决方案,我建议采用多阶段方法。 Redis 擅长实时通讯。 Redis 被设计为内存中键/值存储,并继承了内存数据库的一些非常好的优点:O(1) 列表操作。只要服务器上有可用的 RAM,Redis 就不会减慢推送到列表末尾的速度,这在您需要以如此极端的速率插入项目时非常有用。不幸的是,Redis 无法处理大于您拥有的 RAM 量的数据集(它只能writes到磁盘,读取用于重新启动服务器或系统崩溃的情况)并且扩展必须通过以下方式完成you and 你的申请。 (一种常见的方法是将密钥分布在众多服务器上,这是由一些 Redis 驱动程序实现的,尤其是 Ruby on Rails 的驱动程序。)Redis 还支持简单的发布/订阅消息传递,这有时也很有用。

在这种情况下,Redis 是“第一阶段”。对于每种特定类型的事件,您在 Redis 中创建一个具有唯一名称的列表;例如,我们有“查看页面”和“点击链接”。为简单起见,我们希望确保每个列表中的数据具有相同的结构;单击的链接可能具有用户令牌、链接名称和 URL,而查看的页面可能仅具有用户令牌和 URL。你首先关心的是了解事情发生的事实等等绝对有必要您需要的数据已推送。

接下来,我们有一些简单的处理工作人员,通过要求 Redis 从列表末尾取出一个项目并将其移交给 Redis,将这些疯狂插入的信息从 Redis 手中夺走。工作人员可以进行正确归档数据所需的任何调整/重复数据删除/ID 查找,并将其移交给更永久的存储站点。根据需要启动尽可能多的工作线程,以保持 Redis 的内存负载可以承受。您可以用任何您想要的语言(Node.js、C#、Java 等)编写工作程序,只要它有一个 Redis 驱动程序(现在大多数 Web 语言都有)和一个用于您所需存储的驱动程序(SQL、Mongo 等)。 )

MongoDB 擅长文档存储。与 Redis 不同的是,它能够处理大于 RAM 的数据库,并且它自己支持分片/复制。与基于 SQL 的选项相比,MongoDB 的优势在于您不必拥有预定的架构,您可以随时根据需要随意更改数据存储方式。

不过,我建议使用 Redis 或 Mongo 作为保存数据进行处理的“第一步”阶段,并使用传统的 SQL 设置(也许是 Postgres 或 MSSQL)来存储处理后的数据。对我来说,跟踪客户行为听起来像是关系数据,因为您可能想要“向我显示查看此页面的每个人”或“此人在这一天查看了多少页”或“哪一天的查看者总数最多? ”。您可能会出于分析目的而提出更复杂的连接或查询,成熟的 SQL 解决方案可以为您完成大量此类过滤工作; NoSQL(特别是 Mongo 或 Redis)无法跨不同数据集进行联接或复杂查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB、Redis 与 Cassandra 的快速写入、临时行存储解决方案 的相关文章

随机推荐

  • 如何在 Python 中将 JSON 字符串转换为字典?

    我已经阅读了有关从 str 到 dic 的 python 转换的不同帖子 但我仍然遇到问题 并且无法在字典中转换我的 str 这是我原来的字符串 faqId 1 isPrivate false question Question 1 ans
  • WCF 绑定配置仅作为默认值应用,但命名失败

    WCF 绑定和流传输模式有一个有趣的问题 我们无法解决 我们有一个配置为流传输模式的 WCF 端点 端点接收到的消息比默认大小 65 KB 大得多 因此 我们在绑定标记的 maxReceivedMessageSize 属性中指定了更大的消息
  • 什么是“分段错误(核心转储)”? [复制]

    这个问题在这里已经有答案了 我正在尝试在 Linux 中编写一个具有 sqrt 参数的 C 程序 代码如下 include
  • 更改 Javascript 警报的标题 [重复]

    这个问题在这里已经有答案了 如何更改 javascript 警报弹出窗口的标题 你不能 https developer mozilla org en US docs DOM window alert 这是由浏览器决定的 为了用户的安全 例如
  • 小吃店不显示

    我继承自BaseActivity对于所有其他活动 public class BaseActivity extends AppCompatActivity public static CoordinatorLayout coordinator
  • Mysql:一般错误:1366 字符串值不正确

    今天 我在开发基于 PHP MySql 和 Zend Framework 的应用程序时遇到错误 此外 我正在使用phpseclib http phpseclib sourceforge net 使用加密数据AES算法 http en wik
  • 如何获取任意矩阵的缩放值?

    图像按矩阵缩放 Matrix matrix new Matrix matrix postScale matrix postTranslate matrix postRotate 我希望缩放后的图像不会小于原始图像的一半 因此总缩放不应小于0
  • 如何使用 GCC 和 Linux 子系统为 Windows 编译可执行文件?

    Windows 10 周年更新包括适用于 Ubuntu 的 Linux 子系统 我安装了 gccsudo apt get install gcc 我写了一些简单的 C 代码用于测试目的 include
  • PHP 验证复选框

    我搜索了整个互联网 试图找到我在这里缺少的东西 或做错的事情 的解决方案 即使选中该复选框 我的表单也不会验证 其他一切都很好 这是我无法正常工作的复选框 我尝试了许多不同的想法 但即使选中 条款 它也不会验证 例如下面的示例 这是我的 H
  • 如果前一个请求正在运行,如何取消 $.ajax 请求? [复制]

    这个问题在这里已经有答案了 我有这段简单的代码 document on input addFoodSearch function event var search this val ajax url ajax search food php
  • SQL Server:UNION 后的 INNER JOIN 导致哈希匹配(聚合)缓慢

    这是一个会减慢整个存储过程速度的 CTE select from finalResults where intervalEnd is not null union select two startTime two endTime two i
  • 无法让 MailChimp 使用 API 和 Curl 保存我的数据

    我已经尝试过使用curl将数据发送到MailChimp但无法获取 要保存在 MailChimp 中的数据 任何对此的帮助将不胜感激 这是我的代码 mailChimpUrl http us2 api mailchimp com 1 3 met
  • 让 Preferences API 在 Android 和 PC 上运行

    我想从在 PC 或 Android 手机上运行的草图中保存用户首选项 并尽可能使用标准 Java 方式 中的相同代码 适合我的目的的理想候选者似乎是 java util prefs Preferences 类 因此 我编写了一个小测试脚本来
  • 使用 socket.io 和 webpack-dev-server 时出错

    快速问一下大家 我正在尝试将 webpack dev server 与 socketio 一起使用 但是在尝试了不同的操作之后 我认为两个客户端都在监听相同的端口 3000 并且最终出现了某种握手错误如果我不在同一端口上使用 webpack
  • C 性能和编译选项

    对于像选择排序这样的简单算法 我有两个类似的实现 java 和 c public interface SortingAlgorithm public void sort int a public class SelectionSort im
  • 从选项卡转到根页面

    我想知道如何返回到 rootPage 中定义的appComponent使用选项卡时 setRoot 方法没有按我的预期工作 当它在选项卡页面中使用时 导航堆栈不会被清除 在 主页 上 后退按钮可见 而不是导航切换 并且显示选项卡的标题 默认
  • ASP.NET MVC = 具有 .NET 类库的经典 ASP。真的吗?

    This https web archive org web 20130307101732 http geekswithblogs net 80 AzamSharp archive 2007 12 11 117590 aspx博客文章和我们
  • 有什么方法可以为 WebAPI 项目生成 C# HTTPClient 包装器吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 在即将推出的项目中 我们希望使用 ASP NET WebAPI 2 向我们的网站和浏览器客户端公开服务
  • Postgres SSL 错误

    我正在尝试通过 SSH 和 drush 命令行 shell 运行 Drupal 迁移 将数据从 postgres 数据库复制到 mysql 它工作正常一段时间 大约 5 分钟左右 但随后我收到错误 SQLSTATE HY000 Genera
  • MongoDB、Redis 与 Cassandra 的快速写入、临时行存储解决方案

    我正在构建一个跟踪和验证广告展示次数和点击次数的系统 这意味着有很多插入命令 平均每秒约 90 个 峰值为 250 个 和一些读取操作 但重点是性能并使其速度极快 该系统目前使用 MongoDB 但从那时起我就开始使用 Cassandra