還沒接觸elasticsearch之前大家免不了都會用數據庫, 像我這種微軟狗當好幾年的, Microsoft Sql Server之唯一方案.
現在時代不同了都邁向no-sql, 那數據移轉就是首要的工作, elasticsearch知道這事情的重要性, 所以有了river 這種技術來輔助我們移轉.
此外, river-jdbc有2種方式可以把sql數據同步過來, 我這篇介紹的是river, 其實還有個效能更好的feeder的方案(下次介紹)
我使用的elasticsearch版本是1.2.1
首先river是以plugin的形式成為elasticsearch的功能, 所以我們得來安裝一下elasticsearch-river-jdbc, 請到elasticsearch文件夾下的bin文件夾進行以下命令
plugin --install jdbc --url http://xbib.org/repository/org/xbib/elasticsearch/plugin/elasticsearch-river-jdbc/1.2.1.1/elasticsearch-river-jdbc-1.2.1.1-plugin.zip
安裝好之後, 這次要移轉的是MS SQL請到這裡下載, 並解壓找到sqljdbc4.jar檔案, 然後拷貝到elasticsearch文件夾下的lib文件夾, 這裡面已經有很多jar的文件了(jar的大本營).
現在可以把你的elasticsearch給啟動了, 執行bin\elasticsearch.bat
如果你的Windows無法執行curl,建議用Git bash,這時代大家都用Git吧,執行以下命令
curl -XPUT 'localhost:9200/_river/njmssql/_meta' -d ' { "type": "jdbc", "jdbc": { "url": "jdbc:sqlserver://192.168.92.226:1433;databaseName=log8k2605(140310)", "user": "", "password": "", "sql": "SELECT PID as _id, SiteID as _type, year(StartTime) as _index, Length, StartTime, EndTime FROM T_Record_Info", "maxbulkactions" : 1000, "schedule" : "*/20 * * * * ?" } }'
njmssql這裡可以自行命名
在url那邊要注意到端口的開啟,還有MS SQL是否能用TCP/IP的方式訪問
如果法順利啟動, 那關閉elasticsearch, 再次執行bin\elasticsearch.bat
這裡我用了個技巧, 直接在sql語法中指定了_index, _type, _id這些重要的字段, 因為我的data flow是隨時間增加數據的, 所以我不可能讓全部數據寫進同一個index下.
maxbulkactions是bulk一次寫入的筆數
schedule那個字段是屬於排程控制的(我是設定每20秒執行一次), 可參考這裡,還有這裡.
没有配置schedule就只会运行一次而已
接下來你可以看看你的index文件數量是不是增加了
http://localhost:9200/_count
如果要移除剛剛創建的njmssqlriver請在執行
curl -XDELETE 'localhost:9200/_river/njmssql'
注意:如果想更新配置只能删了再新增, 想停止就执行删除