【问题标题】:How do I connect to MemSQL from Elixir如何从 Elixir 连接到 MemSQL
【发布时间】:2017-08-17 13:31:59
【问题描述】:

MemSQL 与 Mysql 二进制兼容并使用相同的驱动程序。但是,当您使用 mariaexmysqlex 从 Elixir 连接时,这种理论上的好方法似乎并不适用。

使用 mariaex,我可以正常连接:

但由于 enable_binary_protocol 问题,我无法查询:

在 memsql.cnf 中为聚合器类型启用二进制协议适用于一些短查询,但不适用于较长的查询。首先,在编辑 memsql.cnf 以包含“enable_binary_protocol=true”行并使用“memsql-ops memsql-restart”重新启动集群后,我检查了该参数确实已设置:

现在有些东西有效,但有些无效:

顺便说一句,该查询在 memSQL 命令行界面中运行良好:

同时,mysqlex 驱动程序甚至没有连接:

所以我基本上被难住了。有人成功地将 Elixir 与 memSQL 一起使用吗?如果有,秘诀是什么?

一种选择可能是使用 Erlang 库。 This one (also available on Hex) 可能不错,但我不知道如何从 Elixir 调用 Erlang 函数。在将依赖项 {:mysql, "~> 1.0"} 添加到我的 mix.exs 之后,我得到的最接近的是在 iex 中成功编译它。

【问题讨论】:

    标签: elixir singlestore


    【解决方案1】:

    我对@9​​87654324@ 没有任何经验,但它does look 就像mysql-otp 一样在客户端准备查询语句。您可以尝试这样使用它:

    # Connect
    {:ok, pid} = :mysql.start_link(host: 'localhost', user: 'foo', password: 'hello', database: 'test')
    
    # Select
    {:ok, columns, rows} = :mysql.query(pid, "SELECT * FROM mytable WHERE id = ?", [1])
    
    # Transactions
    result = :mysql.transaction(pid, fn ->
      :ok = :mysql.query("INSERT INTO mytable (foo) VALUES (1)")
      raise "foo"
      :ok = :mysql.query("INSERT INTO mytable (foo) VALUES (1)")
    end)
    

    更多详情请参阅official Erlang/Elixir crash course

    【讨论】:

      【解决方案2】:

      http://docs.memsql.com/docs/prepared-statements。应该有一个客户端设置以仅使用客户端准备好的语句 - 该页面上列出了许多示例。这是让此类客户端连接的推荐方式。

      【讨论】:

      • 我看过这个文档列表,但我无法知道这些 mariex 和/或 mysqlex 使用哪一个。事实上,我不相信他们会使用它们中的任何一个,因为它们都是纯粹的长生不老药库。
      猜你喜欢
      • 2014-08-17
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      相关资源
      最近更新 更多