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 的快速写入、临时行存储解决方案 的相关文章

  • MongoDB - 编辑器变量 - MongoDB shell - Windows 7

    EDITOR 变量功能真的可以在 Windows 7 上使用吗 我正在读一篇文章 说一旦我们设置了 EDITOR 变量在 mongorc js 中 我们只需在 shell 中输入 编辑变量名 and var name将被加载到编辑器中 在我
  • Mongo JSON 文档 -> JSON -> BSON

    我正在使用 Node js 构建一个使用 mongodb 的 Web 套接字服务器 我使用 node mongodb native 作为访问 mongodb 的库 当我对数据库中的对象调用 console log sys inspect i
  • 如何获取 bson 文档的大小(以字节为单位)

    bson文档的size 函数返回的int值是字节数吗 无法找到此 API 的详细信息 如何获取 bson 文档的大小 以字节为单位 这是我的代码 import org bson Document MongoDatabase db Mongo
  • MongoDB $geoIntersects 不适用于包含负顶点的多边形

    我已在数据库中存储了跨越 x 轴和 y 轴的多边形 并且我想搜索包含给定点的多边形 为此 我使用 geoIntersects 运算符来指定一个点 但是 当多边形穿过轴时 MongoDB 不会返回任何多边形 我可以对查询或架构进行任何小的更改
  • 带有卷的 docker 中的 Mongo db 持久化

    我正在尝试创建一个 mongo 数据库容器 但无法使数据持久化 这是我的 docker compose yml version 3 2 services mongodb image mongo 2 4 command smallfiles
  • Mongoose 模型 update() 与 save()

    有一个关于问题update vs save https stackoverflow com questions 39010045 mongoose update vs save 但它针对的是一些不同的东西 我猜 纯粹相关mongoose S
  • Cassandra 安装问题

    按照以下步骤安装 apache cassandra 最新版本 第一次启动时 cassandra f 我得到这个 Exception in thread main java lang NoClassDefFoundError org apac
  • 如何使用 pymongo 在 mongodb 中查询日期?

    我试图在 mongodb 中执行查询日期 但结果始终为空 我的查询如下 in the begin code def init self self now datetime now self db conexaoMongo self hora
  • 无法连接到服务器 127.0.0.1:27017 连接尝试失败 MongoDB

    我正在使用 Ubuntu 操作系统 16 04 我正在使用命令启动 mongodb sudo service mongod start进而mongo 它为我生成了这个错误 MongoDB shell version v4 0 1 conne
  • Elasticsearch 聚合过滤器

    因为我在谷歌上找不到任何东西 是否可以在elasticsearch中过滤聚合 我正在考虑这样的事情 获取 SOME object X gt 100 的所有对象 提前致谢 编辑 样本数据 我有以下文档结构 docKey 1 value 2 d
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • 使用 Spring Data MongoDB 查询纯 BSON

    是否可以在 Spring Data MongoDB 中查询纯 JSON BSON 数据 而无需将数据转换为实际的模型实现 我能找到的只是 MongoOperation 的
  • Apache Cassandra 中的复合索引

    我正在尝试设置一个 cassandra 列族 其中一些列上有二级索引 在读回数据时我需要进行过滤 在我最初的测试中 当我一起使用多个索引时 速度会变慢 这是我当前的配置方式 通过 cassandra cli update column fa
  • 如何使用 DataStax java 驱动程序增加 cassandra 中的每秒事务数 (TPS)

    设置 2 节点 Cassandra 2 0 7 31 集群 副本 1 DataStax java 驱动程序 2 0 Problem 我正在使用 Datastax java 驱动程序进行负载平衡 我并通过 Jmeter 生成 50000 线程
  • Cassandra 服务器抛出 java.lang.AssertionError: DecoratedKey(...) != DecoratedKey

    我目前正在尝试 Cassandra 在客户端 使用 Hector 我查找了一些像这样的键 ColumnFamilyResult
  • MongoDB自增ID

    MongodB 中自动生成的 ID 的大小为12 Bytes大整数的大小是8 bytes 我在 4 台运行 Ubuntu Server 的机器上有一个 mongodb 集群 但我现在只是在测试 插入只能通过一台服务器 即 Nodejs 服务
  • Mongodump之后,调用MongoRestore挂起

    我们正在尝试在相对较小的数据库上做一个简单的 MongoDump 我们的步骤很简单 export 从目标机器上删除现有数据库 在目标机器上导入 MongoDump 完美执行 mongodump out root mongo prod DB
  • 使用 Tweepy 获取推文时出错

    我有一个用于获取推文的 Python 脚本 在脚本中我使用该库 Tweepy 我使用有效的身份验证参数 运行此脚本后 一些推文存储在我的 MongoDB 中 有些则被 if 语句拒绝 但我仍然收到错误 requests packages u
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J

随机推荐

  • 如何在 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