如何从 Elixir 连接到 MemSQL
How do I connect to MemSQL from Elixir
MemSQL is binary compatible with Mysql and uses the same drivers. However this nice-in-theory does not seem to apply when you connect from Elixir with mariaex or mysqlex。
使用 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 中成功编译它。
参见 http://docs.memsql.com/docs/prepared-statements。应该有一个客户端设置只使用客户端准备好的语句——该页面上列出了许多示例。这是让此类客户端连接的推荐方法。
我对 MemSQL
没有任何经验,但它 does look like 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。
MemSQL is binary compatible with Mysql and uses the same drivers. However this nice-in-theory does not seem to apply when you connect from Elixir with mariaex or mysqlex。
使用 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 中成功编译它。
参见 http://docs.memsql.com/docs/prepared-statements。应该有一个客户端设置只使用客户端准备好的语句——该页面上列出了许多示例。这是让此类客户端连接的推荐方法。
我对 MemSQL
没有任何经验,但它 does look like 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。