MemSQL与Mysql二进制兼容并使用相同的驱动程序。然而,当您从Elixir与mariaex或mysqlex连接时,这种理论上的好处似乎不适用。
但由于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,"〜>之后在iex中成功编译它。 1.0"}到我的mix.exs。
答案 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。应该有一个客户端设置只使用客户端准备的语句 - 该页面上列出了许多示例。这是让这些客户端连接的推荐方法。