如何从Elixir连接到MemSQL

时间:2017-03-24 14:43:08

标签: elixir memsql

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

使用mariaex,我可以很好地连接: enter image description here

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

enter image description here

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

enter image description here

现在有些东西有效,但其他东西不行:

enter image description here

顺便说一句,查询在memSQL命令行界面中工作正常:

enter image description here

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

enter image description here

所以我基本上难过了。是否有人成功使用Elixir与memSQL?如果是这样,秘密成分是什么?

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

2 个答案:

答案 0 :(得分:2)

我对MemSQL没有任何经验,但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

答案 1 :(得分:1)

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