2015-04-09 30 views
26

Chúng tôi có một dự án mới để lập chỉ mục một lượng lớn dữ liệu và để cung cấp thời gian thực. Tôi cũng tìm kiếm phức tạp với các khía cạnh, văn bản đầy đủ, không gian địa lý ...MongoDB + Elasticsearch hoặc chỉ Elasticsearch?

Nguyên mẫu đầu tiên là lập chỉ mục trong MongoDB và tiếp theo, vào Elasticsearch, bởi vì tôi đã đọc rằng Elasticsearch không áp dụng tổng kiểm tra trên các tệp được lưu trữ và chỉ mục không thể tin tưởng hoàn toàn. Nhưng kể từ phiên bản cuối cùng (trong phiên bản 1.5), bây giờ có một kiểm tra và tôi đoán liệu chúng ta có thể sử dụng Elasticsearch làm kho dữ liệu chính không? Và lợi ích của việc sử dụng MongoDB ngoài Elasticsearch là gì?

tôi không thể tìm được cập nhật câu trả lời về các tính năng thoses trong Elasticsearch

Thanks a lot

+1

Điều đó phụ thuộc nhiều vào trường hợp sử dụng của bạn và thiết kế ứng dụng tổng thể. Đây là một câu hỏi quá rộng để được trả lời ở đây một cách hợp lý. –

+1

Ok, nhưng có chống chỉ định sử dụng Elasticsearch? Có một fonctiannality được cung cấp bởi MongoDB nhưng không phải bởi Elasticsearch? – user1853777

+0

Lưu trữ dữ liệu abitrary, ví dụ? –

Trả lời

40

Nói về lý lẽ sử dụng Mongo thay vì/cùng với ES:

  1. tài khoản/vai trò quản lý.

    • Được xây dựng trong MongoDB. Có thể không phù hợp với tất cả nhu cầu của bạn, có thể vụng về ở đâu đó, nhưng nó tồn tại và nó đã được thực hiện khá lâu rồi.
    • Điều duy nhất để bảo mật trong ES là shield. Nhưng nó chỉ cho đăng ký Gold/Platinum để sử dụng sản xuất.
  2. Schema

    • ES là schemaless, nhưng nó được xây dựng trên đầu trang của Lucene và viết bằng Java. Ý tưởng cốt lõi của công cụ này - chỉ mục và tài liệu tìm kiếm, và làm việc theo cách này đòi hỏi sự nhất quán của chỉ mục. Ở mặt sau, tất cả các tài liệu nên được đặt trong chỉ mục lucene phẳng, yêu cầu một số hiểu biết về cách ES nên xử lý các tài liệu và giá trị lồng nhau của bạn và cách bạn nên tổ chức các chỉ mục để duy trì sự cân bằng giữa tốc độ và tính toàn vẹn/tính nhất quán của dữ liệu. Làm việc với ES đòi hỏi bạn phải giữ một số điều về lược đồ trong tâm trí liên tục. Tức là: bạn có thể lập chỉ mục hầu như bất kỳ thứ gì cho ES mà không đặt ánh xạ tương ứng trước, ES có thể "đoán" ánh xạ khi đang bay nhưng đôi khi làm sai và đôi khi ánh xạ ngầm là điều ác, bởi vì một khi nó được đặt, nó không thể thay đổi được/o reindexing toàn bộ chỉ mục. Vì vậy, tốt hơn là không nên coi ES là cửa hàng schemaless, bởi vì bạn có thể bước vào một cái cào một thời gian (và điều này sẽ là đau :)), mà là coi nó là giản đồ, ít nhất là khi bạn làm việc với tài liệu, có thể được cắt thành các cánh cụ thể.
    • Mongo, mặt khác, có thể "nhai và để lại không có mẩu vụn" ra khỏi hầu như bất cứ điều gì bạn đặt trong đó. Và hầu hết các truy vấn của bạn sẽ hoạt động tốt, `cho đến khi bạn nhớ Mongo sẽ xử lý dữ liệu của bạn như thế nào từ phối cảnh JavaScript. Và khi JS được nhập sai, bạn có thể làm việc với luồng công việc thực sự sơ bộ (chắc chắn, nếu bạn cần như vậy)
  3. Xử lý dữ liệu không giống bảng.

    • ES bị giới hạn xử lý dữ liệu mà không đưa dữ liệu vào chỉ mục tìm kiếm. Và giải pháp này là đủ tốt, khi bạn cần lưu trữ và lấy một số dữ liệu bổ sung (so sánh với dữ liệu bạn muốn tìm kiếm).
    • MongoDB hỗ trợ gridFS. Điều này cho phép bạn xử lý các khối dữ liệu lớn phía sau cùng một giao diện. Tức là, bạn có thể lưu trữ dữ liệu nhị phân trong Mongo và lấy nó trong cùng một giao diện, từ quan điểm mã của bạn.
+0

Cảm ơn bạn đã phản hồi Slam :) – user1853777

+0

chỉ cần cập nhật một chút về điều này, ES hiện có plugin cộng đồng để xử lý bảo mật cho cụm của bạn. Đó là khó khăn hơn so với lá chắn được cấu hình, nhưng nó tồn tại;) – Alex

0

Vâng, chọn đúng công cụ cho công việc ngay. Nếu bạn yêu cầu khả năng tìm kiếm như tìm kiếm văn bản đầy đủ, faceting vv, thì không có gì có thể đánh bại một công cụ tìm kiếm đầy đủ. ElasticSearch (ES) hoặc Solr chỉ là vấn đề được lựa chọn.

Bạn thực sự có thể nạp tài liệu (chỉ mục) vào ES để tìm kiếm và sau đó tìm nạp chi tiết đầy đủ cho một mục cụ thể từ MongoDB hoặc bất kỳ cơ sở dữ liệu nào khác.

tôi có thể làm nhiệm vụ của bạn dễ dàng hơn, làm có một cái nhìn tại nơi làm việc mã nguồn mở của tôi đó là sử dụng MongoDB, ES, Redis và RabbitMQ, tất cả được tích hợp tại một nơi, here on github

Xin lưu ý rằng các ứng dụng được xây dựng trong. Net C#.

+0

Ok để tìm kiếm toàn văn, nhưng câu hỏi là những gì các đối số để giữ MongoDB AND Elasticsearch và không chỉ sử dụng Elasticsearch? Btw, cảm ơn bạn đã trả lời – user1853777