mysql - 使用 NoSQL 添加使用统计信息的有效方法

标签 mysql optimization aggregate nosql

我正在开发一个系统,该系统以各种事物的启动和停止事件的形式跟踪使用情况。在我当前的实现中,我有 MySQL,表的每一行都包含开始和停止时间戳,以及有关事件信息的唯一 ID。

在 MySQL 中运行聚合查询来计算停止时间和启动时间的总和非常简单且相对较快,这会返回总使用分钟数。

我正在尝试了解如何将其转化为 NoSQL,并希望获得一些关于以高性能方式实现此功能的最佳方法的建议。

由于 NoSQL 似乎并不真正支持这种开箱即用的计算,因此我必须将一大堆数据发送给我的客户端并进行计算,这将非常慢。一种想法是在插入时预先计算差异(基本上是非规范化),这会创建冗余数据,但会使减法更快。

下一个问题是添加,对于简单的聚合情况,这可以通过维护总和的计数器来完成(实际上在这种情况下,我什至可能不需要预先计算的差异)。然而,问题是,实际上我需要在不同的数据切片上生成这种用法,因此预计算很难做到。我想可以预先计算一堆常见的总和,比如十个左右,但是插入时间似乎会显着减慢,因为必须为每个插入完成此逻辑。对我来说,NoSQL 的最大优势之一是即使对于大型数据集,插入时间也非常短。

如果有人有任何建议,请告诉我。

最佳答案

让我们修复 MySQL 插入时间。

  • 批量插入 - 100 行 INSERT 的运行速度是 100 个 1 行 INSERT 的运行速度的 10 倍。或者使用加载数据
  • (假设 InnoDB)--innodb_flush_log_at_trx_commit = 2-- 可能会显着提高速度。
  • 尽量减少索引数量。

关于mysql - 使用 NoSQL 添加使用统计信息的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116158/

相关文章:

php - 如何将重复 key 与bind_param结合起来

MySQL - 排除重复行的总和

c++ - 编译时优化 - 从发布二进制文件中删除调试打印

css - 如何优化 CSS 交付

python - 如何在 Pandas 的 groupby 之后获取列的计数百分比

r - 将季度数据更改为每小时数据

r - 将多个列折叠/连接/聚合为每个组中的单个逗号分隔字符串

mysql - 在 MySQL 中,是否有必要在 BEGIN 和 COMMIT 语句中使用 FOR UPDATE?

javascript - 为 React hooks 更新 Javascript 对象中属性的最有效方法

sql - 错误 1005 (HY000) : Can't create table when using foreign keys