5

Tôi đã thực hiện rất nhiều nghiên cứu liên quan đến elasticsearch và dường như tôi đang lo ngại về câu hỏi liệu cơ sở dữ liệu có cần thiết hay không.Cơ sở dữ liệu cần thiết với elasticsearch?

hiện Hibernate-tìm kiếm và thiết kế Relational

ứng dụng hiện tại của tôi được viết bằng java sử dụng chế độ ngủ đông, hibernate-tìm kiếm, và một cơ sở dữ liệu mysql. Tìm kiếm Hibernate được xây dựng trên lucene và tự động quản lý các chỉ mục của tôi cho tôi trong các giao dịch cơ sở dữ liệu. Hibernate-search cũng sẽ tìm kiếm theo chỉ mục và sau đó lấy toàn bộ bản ghi từ cơ sở dữ liệu dựa trên các pks được lưu trữ thay vì phải lưu toàn bộ mô hình dữ liệu của bạn trong chỉ mục. Điều này đã làm việc tuyệt vời, tuy nhiên khi ứng dụng của tôi phát triển, tôi đã liên tục chạy vào các vấn đề mở rộng và chi phí làm cho thực tế các chỉ mục Lucene cần phải sống trên mỗi máy chủ ứng dụng và sau đó bạn cần một thư viện khác để đồng bộ các chỉ mục với nhau. Vấn đề khác với thiết kế này là nó đòi hỏi nhiều bộ nhớ hơn trên tất cả các máy chủ ứng dụng vì các chỉ mục đang được nhân rộng và được lưu trữ với ứng dụng.

Cơ sở dữ liệu hoặc Không Database

Đến từ trường hibernate-tìm kiếm tư tưởng, tôi đang bối rối về việc có hay không bạn giả sử để lưu trữ toàn bộ mô hình dữ liệu của bạn trong elasticsearch và loại bỏ các cơ sở dữ liệu truyền thống hoặc nếu giả sử của bạn để lưu trữ dữ liệu tìm kiếm của bạn trong các chỉ mục và một lần nữa như các khóa chính trả về tìm kiếm hibernate để lấy các bản ghi đầy đủ từ cơ sở dữ liệu quan hệ của bạn.

Quản lý Chỉ số

  1. Nếu bạn sử dụng các chỉ số với một db, bạn nên tự duy trì chúng trong giao dịch? Tôi thấy một dự án jdbc được gọi là sông nhưng có vẻ không được chấp nhận và không được khuyến nghị sử dụng cho sản xuất , có thư viện ở đó có khả năng tự động xử lý giao dịch của bạn không?
  2. Nếu chỉ mục của bạn không đồng bộ với db của bạn, có cách nào được khuyến nghị để tạo lại chúng không?

Hibernate-Search API

Tôi cũng thấy những điều sau trong lộ trình ngủ đông tìm kiếm API/SPI cho backends thay thế http://hibernate.org/search/roadmap/

Define API/SPI abstraction to allow for future external backends integrations such as Apache Solr and Elastic Search. 

Tôi tự hỏi nếu ai có bất kỳ đầu vào này? Là hibernate-tìm kiếm có khả năng quản lý các chỉ mục tìm kiếm đàn hồi tự động cho bạn cũng giống như nó với cấu hình gốc của nó?

Nếu Không Database

Điều gì sẽ là nhược điểm của việc không sử dụng một cơ sở dữ liệu cho tìm kiếm bất cứ điều gì liên quan?

Trả lời

3

Tôi phải đối mặt với một vấn đề tương tự trước đây, trên một thiết lập elasticsearch với một mysql với dữ liệu. Giải pháp là chỉ lưu trữ dữ liệu cần tìm kiếm trên elasticsearch, với tham chiếu đến cơ sở dữ liệu quan hệ. Nếu dữ liệu trên elasticsearch đủ cho yêu cầu, tôi chỉ trả về bản ghi elasticsearch. Nếu đó không phải là tôi đã đi đến cơ sở dữ liệu quan hệ và trả lại bản ghi đó thay thế.

Tôi chia thành hai quy trình này vì độ trễ mà cơ sở dữ liệu quan hệ được giới thiệu (đó là API cho dịch vụ web có nhu cầu cao, elasticsearch nhanh hơn). Điều đó đã giới thiệu một vấn đề đồng bộ hóa, nhưng điều đó không quan trọng đối với ứng dụng của tôi và chúng tôi đã kéo định kỳ dữ liệu từ db quan hệ và chỉ lập lại dữ liệu đã thay đổi trên elasticsearch. Elasticsearch có thể chỉ reindex một tập con của records.

Chúng tôi đã xem xét không sử dụng db và lưu trữ mọi thứ trong công cụ tìm kiếm, nhưng nó phụ thuộc vào tầm quan trọng của dữ liệu của bạn. Nếu bạn không thể mạo hiểm mất bất kỳ phần nào của dữ liệu của bạn, không chỉ lưu trữ trên elasticsearch. Chúng tôi luôn coi dữ liệu trong elasticsearch là dễ hỏng và rằng các chỉ mục tìm kiếm có thể được xây dựng lại từ cơ sở dữ liệu.

+0

Cảm ơn trả lời của bạn. Một vài câu hỏi, được bạn làm cập nhật trực tiếp đến chỉ số của bạn trong cơ sở dữ liệu lưu thông tin cập nhật và xóa bỏ? Ngoài ra tôi đang giả sử bạn đang quản lý danh mục của bạn bằng cách serializing một bean để JSON với Jackson? Cuối cùng, nếu bạn đã không thực hiện cập nhật trực tiếp đến chỉ số của bạn, được bạn chỉ cần chạy một công việc định kỳ của một số loại để quản lý cập nhật chỉ số? –

+0

Đó chỉ là một công việc phụ trợ mà lấy diffs được lập chỉ mục. Chúng tôi sử dụng cần tây và người giám sát (Python) cho điều đó. Chúng tôi tuần tự hóa bằng Python, tìm nạp bằng cách sử dụng SQLAlchemy và sử dụng trình tuần tự json của riêng chúng ta để gửi đến elasticsearch. – Ivan

1

Đến từ trường hibernate-tìm kiếm tư tưởng, tôi đang bối rối về hay không bạn giả sử để lưu trữ toàn bộ mô hình dữ liệu của bạn trong elasticsearch và loại bỏ các cơ sở dữ liệu truyền thống hoặc nếu bạn giả để lưu trữ dữ liệu tìm kiếm của bạn trong các chỉ mục và một lần nữa như các khóa chính trở về tìm kiếm ngủ đông để tìm kiếm các bản ghi hoàn chỉnh từ cơ sở dữ liệu quan hệ của bạn.

Bạn có thể lưu trữ mọi thứ, nhưng bạn sẽ có khả năng mở rộng tốt hơn nếu bạn chỉ lưu trữ các trường cần tìm kiếm. Các bản ghi nhỏ hơn, chỉ mục càng nhỏ và có thể phù hợp với một lượng RAM nhất định.

Nếu bạn sử dụng các chỉ mục có db, bạn có nên tự tay duy trì chúng trong khi giao dịch không? Tôi nhìn thấy một dự án jdbc gọi sông, nhưng có vẻ được chấp nhận và không khuyến khích cho sử dụng sản xuất, là có một thư viện ra có khả năng tự động xử lý giao dịch của bạn cho bạn?

Tôi đang sử dụng đồng bộ hóa giao dịch mùa xuân cho việc này. Về cơ bản kích hoạt reindexing không đồng bộ sau khi giao dịch đã được cam kết thành công.

Điều gì sẽ là nhược điểm của việc không sử dụng cơ sở dữ liệu để tìm kiếm bất kỳ có liên quan?

ES không phải là cơ sở dữ liệu và không hỗ trợ hoạt động giao dịch trên các tài liệu.

Các vấn đề liên quan