从MySQL ocaml的哈希(ocaml hash from mysql)

2019-09-22 07:00发布

我有一个大的数据库(约15万条记录),我想嵌入到一个名为compute.ml的OCaml的源代码。 我想(没有成功),这些表格转换成哈希表,并嵌入这些hastables到一个函数compute ,以便具有二进制程序运行quicly无需做查询到外部SQL数据库。

我有2个问题:

  • 是否有一次一个MySQL表导出到一个关联数组(Hashtbl)可以通过访问(甚至嵌入到)我OCaml的函数的方式compute (本身编译和用作二进制)?
  • 是此哈希永久装载在功能或已使其在每次该函数是二进制中调用时重新启动?

我有142741条记录其中,以CSV格式导出一个MySQL表,如下所示:

"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"

Answer 1:

我想有一个.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使用已经在内存变量data

如果你担心读取和解析CSV文件,你可能有一个看Marshal模块,存储变量的二进制版本data

需要注意的是read_csv是不是在标准库,但例如http://csv.forge.ocamlcore.org/ 。



文章来源: ocaml hash from mysql