python - 在 Mysql 或 Python 中良好的实现,可以增加有限的值集

标签 python mysql optimization data-structures set

在 Mysql 或 Python 中,对于增加有限的值集,什么是好的实现(插入速度/内存/读取速度)。也许并没有真正限制,但是,说在所有值中插入新值是对数的?

In Mysql: A SET datatype can hold any number of strings from a predefined list of strings specified during table creation

上下文:

我正在根据 Github 存储库中发生的事件历史来分析编程语言的趋势和其他相关性。语言的集合自然是有限的。我的脚本在发现新脚本时,增长速度比线性慢,我的直觉是它是对数的。无论如何,如果有 100 种语言和 1000000 条文本需要分析,堆叠值的速度如下:

enter image description here

最佳答案

在 MySQL 中:

CREATE TABLE Languages (
    lang VARCHAR(222) NOT NULL,
    counter INT UNSIGNED NOT NULL.
    PRIMARY KEY(lang)
) ENGINE=InnoDB;

分析文本以确定其语言($lang)后:

INSERT INTO Languages (lang, counter)
    VALUES ($lang, 1)
    ON DUPLICATE KEY UPDATE
        counter = counter + 1;

这将非常快(尽管不是最快)。它具有计算每种“语言”出现次数的附加功能。

MySQL SET 可能不适合,因为

  • 当遇到新值时,需要ALTER TABLE,这是一个“重度”操作,
  • SET 仅限于 64 个值。

关于python - 在 Mysql 或 Python 中良好的实现,可以增加有限的值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52952364/

相关文章:

java - HotSpot JVM 中的求模运算符是如何实现的?

c - 单独使用递归构建最小堆

python - regex.sub 意外地用某种编码修改了替换字符串?

python - 迭代 Python3 map 的最快方法

mysql - 两个表中两列的总和 - MySQL

mysql - 重写此 SQL 查询而不使用 HAVING 子句?

mysql - SQL 查询只返回一行

mysql - 我应该使用多个单列索引还是单个多列索引?

python - 用新输入替换文件中的数据

python - Postgres 用户未连接到数据库。即使环境变量设置正确