簡體   English   中英

我如何從Elixir連接到MemSQL

[英]How do I connect to MemSQL from Elixir

MemSQL與Mysql二進制兼容,並使用相同的驅動程序。 但是,當您從Elixir與mariaexmysqlex連接時,這種理論上的建議似乎並不適用。

使用mariaex,我可以很好地連接: 在此處輸入圖片說明

但由於enable_binary_protocol問題,我無法查詢:

在此處輸入圖片說明

在memsql.cnf中為聚合器類型啟用二進制協議可用於某些短查詢,但不適用於較長的查詢。 首先,在編輯memsql.cnf以包括“ enable_binary_protocol = true”行並使用“ memsql-ops memsql-restart”重新啟動集群之后,我檢查了該參數是否確實已設置:

在此處輸入圖片說明

現在有些東西起作用了,但其他東西卻沒有了:

在此處輸入圖片說明

順便說一句,該查詢在memSQL命令行界面中運行良好:

在此處輸入圖片說明

同時,mysqlex驅動程序甚至無法連接:

在此處輸入圖片說明

所以我基本上很沮喪。 有人成功將Elixir與memSQL結合使用嗎? 如果是這樣,秘密成分是什么?

一種選擇是使用Erlang庫。 這個在Hex上也可用 )可能很好,但是我不知道如何從Elixir調用Erlang函數。 將依賴項{:mysql,“〜> 1.0”}添加到我的mix.exs后,我得到的最接近的文件是在iex中成功編譯了它。

我沒有使用MemSQL任何經驗,但看起來確實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)

有關更多詳細信息,請參見官方的Erlang / Elixir崩潰課程

請參閱http://docs.memsql.com/docs/prepared-statements 應該有一個客戶端設置,僅使用客戶端准備的語句-該頁面上列出了許多示例。 這是使此類客戶端連接的推薦方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM