【问题标题】:Database binding for OCaml?OCaml 的数据库绑定?
【发布时间】:2010-11-30 20:52:36
【问题描述】:

我正在尝试找到一个库来从 OCaml 程序访问数据库。尝试ocaml-sqlite后,我不满意,因为它有点慢。

我看过一个 MySQL 模块,但似乎没有维护。

【问题讨论】:

  • 你总是可以为你需要的数据库/功能编写你自己的 C 接口......但我已经将 ocaml-mysql 用于一个小项目(仅使用简单的插入/更新/选择查询,不过)。
  • 但是 ocaml-mysql 是否适用于最近的 mysql 版本?我应该使用 postgres 吗?这是相当基本的数据库内容..
  • 我将 mysql-ocaml 与 mysql v5 远程数据库一起使用。虽然,如前所述,我的具体操作不是 v5 特有的。

标签: mysql sql database postgresql ocaml


【解决方案1】:

如果你的数据库是PostgreSQL,我推荐ocaml-postgresql。 (还有ocaml-sql,在使用ocaml-postgresql时让一些SQL操作更加方便。)

由于PG'OCaml 严重依赖 OCaml 的编译时类型系统,因此无法在运行时编写查询,这使得它在我看来在大多数实际场景中没有用处。

【讨论】:

    【解决方案2】:

    ocaml-mysql 在这里没有问题 - 用于连接/查询/获取的 mysql api 没有太大变化 :) 但是它缺少准备好的语句,必须自己实现 mysql_stmt_* 包装器。

    【讨论】:

    • 我大量使用 MySQL 绑定,包括准备好的语句支持。根据我的经验,它们与 5.0.x 和 5.5.x 配合得很好。
    【解决方案3】:

    我很惊讶你发现 ocaml-sqlite 绑定很慢。 sqlite 本身很快,我相信 sqlite 绑定写得很好。你应该确保你使用的是来自Markus Mottl's page的最新绑定

    【讨论】:

    • 也许我有点要求,我正在解析一个 100 Mo 的文本文件并构建一个数据库。我有很多插入要做,所以我必须更聪明地处理对 exec 的调用。我正在使用最后一个版本。我不知道 IO 对数据库造成的性能损失是什么。文件
    • 只有 100 个月?!我在睡梦中解析它……字面意思!
    • 我不知道该回答什么:-)。您在睡梦中解析它是因为它需要很长时间才能入睡?
    • 考虑使用准备好的语句来减少多个 INSERT 的开销。
    【解决方案4】:

    你检查过Caml Hump吗?它有大量数据库绑定的链接。

    我可以推荐的好的、成熟的绑定是 Richard Jones 的 PG'OCaml 和 Markus Mottl 的 postgresql-ocaml。它们都针对 Postgresql(考虑到您正在使用 Ocaml,这可能是您更好的选择)。

    【讨论】:

    • 当然,我已经检查过了...我担心的是最后一个版本似乎很旧。所以我想知道人们实际使用的是什么。
    • 相当老是什么意思?在 PG'OCaml 的情况下,最新版本是几个月前的,并且在 SVN 中似乎有持续的活动。至于 postgresql-ocaml,没有新版本,因为不需要升级运行良好的... :-)
    • 好吧,我的错,我没有去 PG'Ocaml 新网站。对于 postgresql-ocaml,我不想花时间在我不能使用的东西上。谢谢。
    • 我试试看。通过修改我的模式,sqlite 中的解析/插入要快得多,但 postgresql 似乎很有吸引力。
    猜你喜欢
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多