gpt4 book ai didi

mysql - 来自 mysql 的 ocaml 哈希

转载 作者:行者123 更新时间:2023-11-29 02:31:40 29 4
gpt4 key购买 nike

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

我有两个问题:

  • 有没有办法一次性将 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"

最佳答案

我会有一个 .csv 文件 data.csv 包含您的 mysql 表,导出为 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com