Sqlite3 cho lua

Mặc dù nhiều hệ CSDL có thể cài đặt trên RPi, nhưng LUA không thể khai thác trực tiếp các CSDL này mà cần có công cụ trung gian. Trong số các công cụ đó là lsqlite3, lmysql, lsql…

Cài đặt lsqlite3

Trước khi cài lsqlite3, cần phải cài sqlite3.

Mặc dù có thể cài sqlite3 dễ dàng qua dòng lệnh apt-get install sqlite3, nhưng sau đó không thể cài tiếp lsqlite3 vì thiếu file nguồn để biên dịch. Do vậy phải cài đặt sqlite3 bằng cách biên dịch từ source. Các bước tuần tự như sau:

1. Cài đặt lua-5.3

sudo apt-get install libreadline-dev 
curl -R -O http://www.lua.org/ftp/lua-5.3.2.tar.gz
tar zxf lua-5.3.2.tar.gz
cd lua-5.3.2
sudo make linux test
sudo make install

Nếu cần mở rộng thư viện utf8 thì tải về thư viện utf8 tại https://github.com/starwing/luautf8. Chép unidata.clutf8lib.c vào thư mục src trước khi biên dịch lua.

Cần phải reboot để lua hoạt động đúng.

2. Cài đặt luarock

Luarock giúp cài đặt nhanh chóng nhiều tiện ích cho Raspbian.

wget http://luarocks.org/releases/luarocks-2.3.0.tar.gz
tar zxpf luarocks-2.3.0.tar.gz
cd luarocks-2.3.0
./configure
sudo make bootstrap
sudo luarocks install luasocket

3. Cài đặt sqlite3

wget http://sqlite.org/2016/sqlite-autoconf-3130000.tar.gz
tar -xvf sqlite-autoconf-3130000.tar.gz
cd sqlite-autoconf-3130000
./configure
sudo make
sudo make install

4. Cài đặt lsqlite3

sudo luarocks install lsqlite3

Thí dụ

Tìm các tên bài nhạc có từ đầu tiên, viết thường, là how

sqlite3 = require("lsqlite3")
db = sqlite3.open('Chinook.sqlite')
for row in db:nrows ("SELECT TrackId, Name, lower(substr(" .. Name .. ", 1, instr(" .. Name .. "||' ', ' ')-1))) as sName FROM Track WHERE sName = 'how'" ) do
    print( row.TrackId, row.Name )
end

Chạy đoạn mã trên liên tiếp 100 lần trên RPi 3, thời gian thi hành ít hơn 3s. Nếu thêm hàm tacc (C user function: cắt dấu chữ Việt) sau substr và trước lower thì thời gian là 7s. Các hàm lower/upper rất chậm trên chuỗi dài.

Kết quả trả về:

350     How Many More Times
631     How High The Moon
1626    How Many More Times
2296    How The West Was Won And Where It Got Us
3103    How Many Say I
3223    How to Stop an Exploding Man

Leave a Comment

Filed under Software

Leave a Reply