mysql - 来自 mysql 的 ocaml 哈希

标签 mysql csv hashtable ocaml

我有一个大型数据库(大约 150 000 条记录),我想将其嵌入到名为compute.ml 的 OCaml 源代码中。我正在尝试(没有成功)将这些表转换为哈希表,并将这些哈希表嵌入到函数compute中,以便使二进制程序快速运行,而无需对外部sql数据库进行查询。

我有 2 个问题:

  • 有没有办法将 mysql 表一次性导出到关联数组 (Hashtbl) 中,该数组可以通过我的 OCaml 函数 compute 访问(甚至嵌入到其中)(本身已编译并用作二进制)?
  • 此哈希表是永久加载到函数中还是每次在二进制文件中调用函数时都重新启动它?

我有一个包含 142741 条记录的 mysql 表,以 CSV 格式导出,如下所示:

"1";"27";"10";"coco";"0";"730";"1641025";"1641053";"foo";"1";"S";"0"
"2";"27";"11";"kiki";"0";"730";"1641054";"1641083";"bar";"1";"S";"0"
"3";"27";"12";"toto";"0";"730";"1641084";"1641113";"foofoo";"1";"S";"0"
"4";"27";"1";"tata";"0";"730";"1641114";"1641142";"barbar";"1";"S";"0"
...
"142741";"5";"7";"chotto";"0";"1347";"1971472";"1971500";"lastrecord";"1";"S";"0"

最佳答案

我会有一个包含 mysql 表的 .csv 文件 data.csv,并导出为 csv 格式。 然后在 OCaml 中,当程序启动时,我将读取并解析该文件一次:

let data = read_csv("data.csv")
因此,

data 是一个 Hashtbl.t 类型的变量,包含 150K 条记录。 然后,OCaml 函数(在您的问题中称为 compute)使用此变量:

let compute x =
  let foo = Hashtbl.find data x in
  ...

这样,就不会调用 MySQL 服务器,数据仅在启动程序时读取一次,然后每次调用函数 compute 时都会使用内存中已有的变量 数据

如果您担心读取和解析 csv 文件,您可以查看 Marshal 模块,以存储变量 data 的二进制版本。

请注意,read_csv 不在标准库中,但例如 http://csv.forge.ocamlcore.org/ .

关于mysql - 来自 mysql 的 ocaml 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12350982/

相关文章:

mysql - 是否可以在不使用 create、alter、delete、drop 命令的情况下修改任何数据库的架构或实例?

javascript - 保留 jquery 选项值,保存用户的值

java - 如何获取排序 HashMap 中两个给定键之间的所有键值?

mysql - SQL 按日期排序,但需要最大值和最小值随时间发生。我需要 minTime minValue maxTime maxValue 按日期

mysql - 使用表 B 中的所有新条目更新表 A,并通过 B 更新 A 中的现有条目

mysql - 将 csv 文件加载到 MySQL,字段中以逗号分隔和逗号分隔

PHPExcel - 将 4 个 CSV 文件读取到一个带有 4 个电子表格的工作簿中

linq - 从 LINQ 中的字符串列表生成 CSV

c - 遍历后表被删除

java - 哪个更快,String 或 Integer 作为 Java 中的 hashkey?