ElasticSearch & php & mysql thực hành – Phần 1

https://thinhpc86.wordpress.com/page/2/?s=ElasticSearch

ElasticSearch & php & mysql thực hành – Phần 1

June 9, 2015 thinhpc86 Java, PHPElasticSearch, Java, Lucene

Là 1 lập trình viên sẽ có lúc bạn phải làm việc với 1 cơ sở dữ liệu rất lớn đến hàng Gigabyte. Nếu ứng dụng của bạn phải search nhiều, liên tục trên cơ sở dữ liệu với cả triệu record thì việc tối ưu câu SQL hay PHP logic cũng chỉ giải quyết được phần nhỏ.

Qua tìm hiểu tôi quyết định nghiên cứu ElasticSearch (ES) – 1 search engine được đánh giá khá cao về hiệu suất search trên lượng dữ liệu lớn.

Tôi có lục tìm trên Google để kiếm tutorial, mỗi tutorial đều có cái hay và cái chi tiết để tôi hiểu sâu hơn 1 vấn đề nào đó. Nhưng hữu ích nhất và chi tiết nhất có lẽ vẫn là tutorial của chính website mà ta download ElasticSearch. Vậy hãy bắt đầu từ chính nơi nó được sinh ra:

https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

Tutorial này đã khá chi tiết, nên tôi không định viết ra 1 tutorial nào nữa. Ở đây tôi sẽ viết ra những điều tôi thấy cần ghi nhớ và chú ý cho mình và có thể cũng cho ai mới tìm hiểu về ElasticSearch (ES) dễ hiểu hơn.

Để hiểu rõ hơn về sau thì trước tiên ta nắm qua 1 số khái niệm cơ bản:

Near Realtime(NRT):

ES là 1 nền tảng Search “gần” thời gian thực, nghĩa là có 1 độ trễ nhỏ từ lúc bạn index 1 document cho đến lúc nó có thể được search ra, thường là khoảng 1 giây.

Cluster:

Một cluster(cụm) là 1 tập hợp của 1 hoặc nhiều Nodes (servers) mà cùng nhau nắm giữ toàn bộ dữ liệu của bạn và cung cấp các chỉ mục và khả năng search qua tất cả các nodes. Một cluster được định danh bởi 1 tên duy nhất, mặc định là “elasticsearch”.

Bạn có thể có nhiều clusters độc lập với những cluster name khác nhau

Node:

Một node là một server riêng mà là 1 phần trong Cluster của bạn. Lưu trữ dữ liệu và tham gia vào việc lập chỉ mục và search. Một node cũng được định danh bở 1 tên riêng biệt, mặc định bằng tên của 1 nhân vật trong Marvel, được chỉ định cho node khi khởi động. Cái tên mặc định này bạn có thể thay đổi được.

Mặc định mỗi node được thiết đặt để join với 1 cluster nhất định bởi cluster name. Mặc định sẽ được join vào “elasticsearch” cluster. Điều đó có nghĩa khi bạn khởi động 1 vài nodes trong cùng 1 mạng của bạn, thì chúng sẽ nhìn thấy nhau và là các nhánh riêng của 1 cụm chung tên là “elasticsearch”.

Trong 1 cluster bạn có thể có bao nhiêu node cũng được.

Index:

Một index là 1 tập hợp các documents có đặc điểm chung. Ví dụ, bạn có 1 index cho dữ liệu sản phẩm, 1 index khác cho danh mục sản phẩm, hoặc 1 index khác để sắp xếp dữ liệu. Một index được được định danh bởi tên riêng, tên riêng viết thường, ko viết hoa. Cái tên này dùng để liên hệ đến index khi thực hiện tạo index, search, update, delete document trong nó.

Trong 1 cluster có thể chứa nhiều indexes

Type:

Trong 1 index bạn có thể định nghĩa 1 hoặc nhiều types. Một type là 1 mục/phân vùng có nghĩa trong index của bạn. 1 Type được định nghĩa cho document bao gồm 1 số fields. Ví dụ bạn làm blog, bạn có thể định nghĩa 1 type cho dữ liệu user, type khác cho dữ liệu blog hay type khác cho dữ liệu comment.

Document:

1 Document là 1 đơn vị thông tin cơ bản để được đánh index. Ví dụ bạn ó 1 document cho 1 customer, document khác cho 1 sản phẩm hay cho 1 đơn đặt hàng khác. Document này được format dưới dạng JSON, dạng dữ liệu phổ biến mà tất cả các ngôn ngữ khác có thể hiểu được.

Trong mỗi index/type, bạn có thể lưu trữ nhiều documents. Chú ý 1 document cần được gán vào 1 type bên trong index để có thể được đánh index

Shard & Replicas:

Mỗi index có thể được chia thành nhiều Shards. Mỗi index cũng có thể được sao lưu nhiều lần. Mỗi khi được nhân bản, mỗi index sẽ có những shards chính và những shards nhân bản (copy từ shards chính). Số lượng shards và replicas có thể được khai báo khi tạo index. Sau khi index được tạo, bạn có thể thay đổi số lượng bản sao bất cứ lúc nào nhưng không thể thay đổi số shards.

By default, each index in Elasticsearch is allocated 5 primary shards and 1 replica which means that if you have at least two nodes in your cluster, your index will have 5 primary shards and another 5 replica shards (1 complete replica) for a total of 10 shards per index.

Note:

Each Elasticsearch shard is a Lucene index. There is a maximum number of documents you can have in a single Lucene index. As of LUCENE-5843, the limit is 2,147,483,519 (= Integer.MAX_VALUE – 128) documents. You can monitor shard sizes using the_cat/shards api.

Trong bài tới chúng ta sẽ đi vào cài đặt ElasticSearch

Nội dung trong bài được tham khảo từ:

https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html

Last updated