Thứ sáu, 31/07/2015 | 00:00 GMT+7

Cách thêm truy vấn NoSQL vào MySQL với memcached trên Ubuntu 14.04

Ý tưởng chung về việc sử dụng memcached và triển khai server độc lập của nó với MySQL đã được mô tả trong nhiều bài viết hay, chẳng hạn như bài Cách cài đặt và sử dụng Memcache trên Ubuntu 14.04 . Tuy nhiên, memcached như một server độc lập hoạt động như một trung gian phía trước lớp truy cập client MySQL và chỉ quản lý thông tin trong bộ nhớ mà không có tùy chọn để lưu trữ liên tục. Điều này làm cho nó phù hợp với các việc như lưu vào bộ nhớ đệm kết quả của các truy vấn MySQL trùng lặp. Điều này tiết kiệm tài nguyên và tối ưu hóa hiệu suất của các trang web bận rộn.

Tuy nhiên, trong bài viết này ta sẽ thảo luận về một số điều khác. Memcached sẽ được cài đặt như một plugin MySQL và được tích hợp chặt chẽ vào MySQL. Nó sẽ cung cấp một lớp truy cập kiểu NoSQL để quản lý thông tin trực tiếp trong các bảng MySQL InnoDB thông thường. Điều này có nhiều lợi ích như ta sẽ thấy ở phần sau của bài viết.

Sự hiểu biết cơ bản

Để có thể theo dõi bài viết này, bạn cần một số hiểu biết cơ bản về NoSQL và memcached là gì. Nói một cách đơn giản, NoSQL hoạt động với thông tin dưới dạng (các) mục key-value . Cách tiếp cận rõ ràng đơn giản hơn so với SQL tiêu chuẩn cho thấy hiệu suất và khả năng mở rộng tốt hơn, đặc biệt được tìm kiếm để làm việc với lượng lớn thông tin (Dữ liệu lớn).

Tuy nhiên, hiệu suất tốt của NoSQL không đủ để thay thế SQL thông thường. Sự đơn giản của NoSQL khiến nó không phù hợp với dữ liệu có cấu trúc với các quan hệ phức tạp trong đó. Do đó, NoSQL không phải là một sự thay thế của SQL mà là một bổ sung quan trọng cho nó.

Đối với memcached, nó có thể được coi là một triển khai phổ biến của NoSQL. Nó rất nhanh và có cơ chế bộ nhớ đệm tuyệt vời như tên gọi của nó. Đó là lý do tại sao nó là một lựa chọn tuyệt vời để đưa phong cách NoSQL vào MySQL truyền thống.

Một số hiểu biết về giao thức memcached cũng cần thiết. Memcached hoạt động với các mục có các phần sau:

  • Một khóa - Giá trị chữ và số sẽ là khóa để truy cập giá trị của mục.
  • Giá trị - Dữ liệu tùy ý nơi lưu giữ trọng tải thiết yếu.
  • Cờ - Thường là giá trị được sử dụng để cài đặt các tham số bổ sung liên quan đến giá trị chính. Ví dụ, nó có thể là một cờ cho dù có sử dụng tính năng nén hay không.
  • An expiration time - Thời gian hết hạn tính bằng giây. Nhớ lại rằng ban đầu memcached được thiết kế với bộ nhớ đệm.
  • Giá trị CAS - Giá trị nhận dạng duy nhất của từng mặt hàng.

Yêu cầu

Hướng dẫn này đã được thử nghiệm trên Ubuntu 14.04. Cài đặt và cấu hình được mô tả sẽ tương tự trên các version HĐH hoặc HĐH khác, nhưng các lệnh và vị trí của file cấu hình có thể khác nhau.

Bạn cần những thứ sau:

  • Ubuntu 14.04 cài đặt mới
  • User không phải root có quyền sudo

Tất cả các lệnh trong hướng dẫn này phải được chạy với quyền user không phải root. Nếu cần có quyền truy cập root cho lệnh, nó sẽ được đặt trước sudo . Nếu bạn chưa cài đặt , hãy làm theo hướng dẫn này: Cài đặt server ban đầu với Ubuntu 14.04 .

Bước 1 - Cài đặt MySQL 5.6

Plugin memcached trong MySQL có sẵn trong các version MySQL trên 5.6.6. Điều này nghĩa là bạn không thể sử dụng gói MySQL (phiên bản 5.5) từ repository Ubuntu 14.04 tiêu chuẩn. Thay vào đó, bạn sẽ phải:

  1. Thêm repository chính thức của MySQL
  2. Cài đặt server , client và thư viện MySQL từ nó

Đầu tiên, hãy truy cập trang repository apt của MySQL và download gói sẽ thêm repository MySQL vào hệ thống Ubuntu 14.04 của bạn. Bạn có thể download gói trực tiếp trên Server của bạn :

  • wget https://dev.mysql.com/get/mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

Tiếp theo, cài đặt nó với dpkg :

  • sudo dpkg -i mysql-apt-config_0.3.5-1ubuntu14.04_all.deb

Khi bạn chạy lệnh trên, một trình hướng dẫn chế độ văn bản sẽ xuất hiện với hai câu hỏi trong đó:

  • Bạn muốn cấu hình sản phẩm MySQL nào? Trả lời bằng Server .
  • Bạn muốn nhận version server nào? Trả lời với mysql-5.6 .

Khi bạn trả lời hai câu hỏi này, bạn sẽ quay lại câu hỏi đầu tiên về sản phẩm bạn muốn cài đặt. Trả lời với Apply , lựa chọn dưới cùng, để xác nhận lựa chọn của bạn và thoát khỏi trình hướng dẫn.

Đến đây bạn có MySQL repo mới, bạn sẽ phải cập nhật cache apt, tức là thông tin về các gói có sẵn để cài đặt trong Ubuntu. Do đó, khi bạn chọn cài đặt MySQL, nó sẽ được truy xuất từ repository mới. Để cập nhật cache ẩn apt, hãy chạy lệnh:

  • sudo apt-get update

Sau đó, bạn đã sẵn sàng cài đặt MySQL 5.6 trên Ubuntu 14.04 bằng lệnh:

  • sudo apt-get install mysql-server

Sau khi chạy lệnh trên, bạn cần chọn password root ( administrator ) MySQL. Để thuận tiện, bạn có thể chọn không đặt password tại thời điểm này và khi được yêu cầu , chỉ cần nhấn ENTER. Tuy nhiên, khi bạn quyết định chuyển server này sang production , bạn nên chạy lệnh sudo mysql_secure_installation để bảo mật cài đặt MySQL của bạn và cấu hình password root .

Khi quá trình cài đặt hoàn tất, bạn sẽ có server MySQL 5.6 được cài đặt cùng với client dòng lệnh và các thư viện cần thiết của nó. Bạn có thể xác minh nó bằng cách khởi động ứng dụng client bằng lệnh:

  • mysql -u root

Nếu bạn đặt password , bạn cần sử dụng lệnh sau và nhập password root MySQL của bạn khi được yêu cầu :

  • mysql -u root -p

Bạn nên thấy:

Welcome to the MySQL monitor.  Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.25 MySQL Community Server (GPL) ... 

Khi vẫn ở trong màn hình MySQL (thiết bị terminal client ), hãy tạo một database mới được gọi là test :

  • CREATE DATABASE test;

Ta cần database này sau này để thử nghiệm.

Để thoát loại client MySQL:

  • quit

Cuối cùng, như một phần phụ thuộc cho plugin memcached, bạn cũng cần cài đặt gói phát triển cho thư viện thông báo sự kiện không đồng bộ - libevent-dev . Để thực hiện điều này, hãy chạy lệnh:

  • sudo apt-get install libevent-dev

Bước 2 - Cài đặt Plugin memcached trong MySQL

Để chuẩn bị cho quá trình cài đặt plugin memcached, trước tiên bạn phải thực hiện các truy vấn có trong file /usr/share/mysql/innodb_memcached_config.sql . Khởi động client MySQL:

  • mysql -u root

hoặc, nếu bạn đặt password :

mysql -u root -p 

và thực hiện:

  • source /usr/share/mysql/innodb_memcached_config.sql;

Thao tác này sẽ tạo tất cả các cài đặt cần thiết cho plugin trong database innodb_memcache và cũng chèn một số dữ liệu mẫu trong test database mới tạo của ta .

Sau đó, bạn có thể thực hiện cài đặt plugin memcached từ MySQL terminal bằng lệnh sau:

  • install plugin daemon_memcached soname "libmemcached.so";

Thoát phiên MySQL:

  • quit

Thao tác này cài đặt plugin memcached được tìm thấy trong folder /usr/lib/mysql/plugin/ trong Ubuntu 14.04. Tệp này chỉ có sẵn trong MySQL version 5.6 trở lên.

Sau khi cài đặt xong, bạn phải cấu hình trình nghe plugin memcached. Bạn cần nó để kết nối với plugin memcached. Vì mục đích này, hãy mở file /etc/mysql/my.cnf bằng editor yêu thích của bạn như sau:

  • sudo vim /etc/mysql/my.cnf

Một nơi nào đó sau dòng [mysqld] thêm một dòng mới có chứa:

/etc/mysql/my.cnf
daemon_memcached_option="-p11222 -l 127.0.0.1" 

Ở trên cấu hình trình nghe plugin ghi nhớ trên cổng 11222 chỉ được bật cho IP vòng lặp 127.0.0.1. Điều này nghĩa là chỉ những khách hàng từ Server mới có thể kết nối. Nếu bạn bỏ qua phần về IP ( -l 127.0.0.1 ), người nghe mới sẽ có thể truy cập tự do từ mọi nơi, đây là một rủi ro bảo mật nghiêm trọng. Nếu bạn lo lắng thêm về tính bảo mật của plugin memcached, vui lòng kiểm tra tài liệu bảo mật của plugin.

Để bắt đầu quá trình lắng nghe mới cho plugin memcached, hãy khởi động lại server MySQL bằng lệnh:

  • sudo service mysql restart

Bước 3 - Kiểm tra Plugin ghi nhớ

Để xác minh cài đặt thành công, hãy chạy lệnh MySQL sau từ client MySQL (khởi động client bằng mysql -u root hoặc mysql -u root -p ):

  • show plugins;

Nếu mọi thứ đều ổn, bạn sẽ thấy trong kết quả :

| daemon_memcached           | ACTIVE  | DAEMON             | libmemcached.so | GPL     | 

Nếu bạn không thấy thông báo này, hãy đảm bảo bạn đang sử dụng MySQL version 5.6 trở lên và bạn đã thực hiện theo đúng hướng dẫn cài đặt.

Bạn cũng có thể thử kết nối với giao diện plugin memcached mới với Telnet từ Server của bạn như sau:

  • telnet localhost 11222

Sau khi thành công, bạn sẽ thấy kết quả như:

Connected to localhost. Escape character is '^]'. 

Đến đây bạn có thể chạy một lệnh chung chung, chẳng hạn như stats thống kê, để xem kết nối này hoạt động như thế nào. Để thoát khỏi dấu nhắc , hãy nhấn đồng thời tổ hợp phím CTRL và] trên bàn phím của bạn. Sau đó, quit để thoát khỏi ứng dụng Telnet.

Telnet cung cấp cho bạn cách đơn giản nhất để kết nối với plugin memcached và với chính dữ liệu MySQL. Nó là tốt để thử nghiệm, nhưng khi bạn quyết định sử dụng nó một cách chuyên nghiệp, bạn nên sử dụng các thư viện sẵn có cho các ngôn ngữ lập trình phổ biến như PHP và Python.

Bước 4 - Chạy các truy vấn NoSQL trong MySQL thông qua Plugin memcached

Nếu bạn quay lại phần cài đặt của plugin memcached trong bài viết này, bạn sẽ thấy rằng ta đã thực thi các câu lệnh từ file /usr/share/mysql/innodb_memcached_config.sql . Các câu lệnh này đã tạo một bảng demo_test trong database test . Bảng demo_test có các cột sau tuân theo giao thức memcached:

  • c1 triển khai trường khóa .
  • c2 thực hiện trường giá trị .
  • c3 thực hiện trường cờ .
  • c4 triển khai trường CAS .
  • c5 thực hiện trường hết hạn .

Bảng demo_test sẽ là bảng mà ta sẽ thử nghiệm. Đầu tiên, hãy mở database / bảng bằng client MySQL bằng lệnh sau:

  • mysql -u root test

Hoặc, nếu bạn đã đặt password MySQL:

  • mysql -u root test -p

Phải có một hàng trong bảng demo_test :

  • SELECT * FROM demo_test;

Kết quả sẽ như sau:

+-------------+--------------+------+------+------+ | c1          | c2           | c3   | c4   | c5   | +-------------+--------------+------+------+------+ | AA          | HELLO, HELLO |    8 |    0 |    0 | +-------------+--------------+------+------+------+ 1 rows in set (0.00 sec)  

Thoát phiên MySQL:

  • quit

Bây giờ, ta hãy tạo một bản ghi thứ hai bằng giao diện NoSQL memcached và telnet. Kết nối lại với localhost trên cổng TCP 11222:

  • telnet localhost 11222

Sau đó sử dụng cú pháp sau:

set [key] [flag] [expiration] [length in bytes] [value] 

Lưu ý giá trị phải nằm trên một hàng mới. Ngoài ra, đối với mỗi bản ghi, bạn phải chỉ định độ dài tính bằng byte cho giá trị khi làm việc theo cách trên.

Như một ví dụ, ta hãy tạo một mục (cơ sở dữ liệu hàng) mới với key newkey , giá trị 0 cho cờ, và giá trị 0 cho hết hạn (không bao giờ hết hạn). Giá trị sẽ có độ dài 12 byte.

set newkey 0 0 12 NewTestValue 

Tất nhiên, bạn cũng có thể lấy các giá trị thông qua giao diện NoSQL này. Điều này được thực hiện với lệnh get , theo sau là tên của khóa bạn muốn lấy. Khi vẫn ở trong phiên Telnet, hãy nhập:

get newkey 

Kết quả sẽ là:

VALUE newkey 0 12 NewTestValue 

Các lệnh setget ở trên hợp lệ với mọi server memcached. Đây chỉ là một vài ví dụ đơn giản về cách chèn và truy xuất các bản ghi theo kiểu NoSQL.

Bây giờ hãy kết nối lại với client MySQL bằng lệnh mysql -u root test hoặc mysql -u root test -p và xem lại nội dung của bảng demo_test bằng cách chạy qyery:

  • SELECT * FROM demo_test WHERE c1="newkey";

Ở đó, bạn sẽ thấy hàng mới được tạo như thế này:

+--------+--------------+------+------+------+ | c1     | c2           | c3   | c4   | c5   | +--------+--------------+------+------+------+ | newkey | NewTestValue |    0 |    1 |    0 | +--------+--------------+------+------+------+ 

Đến đây bạn có thể tự hỏi làm thế nào plugin memcached biết database và bảng nào để kết nối và cách ánh xạ thông tin tới các cột trong bảng. Câu trả lời là trong database innodb_memcache và các vùng containers bảng của nó.

Thực hiện câu lệnh chọn này:

  • select * from containers \G

Bạn sẽ thấy như sau:

*************************** 1. row ***************************                   name: aaa              db_schema: test               db_table: demo_test            key_columns: c1          value_columns: c2                  flags: c3             cas_column: c4     expire_time_column: c5 unique_idx_name_on_key: PRIMARY 1 row in set (0.00 sec) 

Để tìm hiểu thêm về cách tạo các ánh xạ khác nhau và tìm hiểu các tính năng nâng cao của plugin memcached, vui lòng xem trang nội bộ của plugin memcached .

Lợi ích của việc tích hợp MySQL với Plugin memcached

Thông tin và ví dụ ở trên phác thảo một vài lợi ích quan trọng của việc tích hợp MySQL với NoSQL thông qua plugin memcached:

  • Tất cả dữ liệu (MySQL và NoSQL) có thể được lưu giữ ở một nơi. Bạn không phải cài đặt và duy trì phần mềm bổ sung cho dữ liệu NoSQL.
  • Khả năng duy trì dữ liệu, khôi phục và sao chép dữ liệu NoSQL có thể thực hiện được nhờ vào công cụ lưu trữ InnoDB mạnh mẽ.
  • Lớp truy cập dữ liệu memcached cực kỳ nhanh vẫn được dùng để bạn có thể làm việc với dung lượng thông tin cao hơn so với khi làm việc với MySQL client chậm hơn.
  • Dữ liệu NoSQL có thể được quản lý bằng giao diện và cú pháp MySQL. Vì vậy, bạn có thể bao gồm dữ liệu NoSQL trong các truy vấn SQL phức tạp hơn, chẳng hạn như các phép nối trái.

Kết luận

Đến cuối bài viết này, bạn sẽ làm quen với các khả năng mới để làm việc với dữ liệu NoSQL do MySQL cung cấp. Đây có thể không phải là một giải pháp phổ biến để thay thế các server NoSQL chuyên dụng như MongoDB, nhưng nó chắc chắn có giá trị của nó.


Tags:

Các tin trước

Hiểu database SQL và NoSQL và các mô hình database khác nhau 2014-02-21