2012-02-06 44 views
5

Tôi có một bảng với khoảng 100.000 hàng tại thời điểm này. Tôi muốn lập chỉ mục dữ liệu trong bảng này trong chỉ mục Solr.Cách tốt nhất để lập chỉ mục dữ liệu bảng cơ sở dữ liệu trong Solr?

Vì vậy, các phương pháp ngây thơ sẽ là:

  • Nhận tất cả các hàng
  • Đối với mỗi hàng: chuyển đổi sang một SolrDocument và thêm mỗi tài liệu để yêu cầu
  • Khi tất cả các hàng được chuyển đổi sau đó bài yêu cầu

Một số vấn đề với cách tiếp cận này mà tôi có thể nghĩ đến là:

  • Đang tải dữ liệu quá nhiều (nội dung của toàn bộ bảng) vào bộ nhớ
  • đăng một yêu cầu lớn

Tuy nhiên, một số ưu điểm:

  • Chỉ có một yêu cầu đến cơ sở dữ liệu
  • Chỉ một yêu cầu POST gửi tới Solr

Cách tiếp cận này không thể mở rộng, tôi thấy rằng vì khi bảng phát triển như vậy sẽ yêu cầu bộ nhớ và kích thước của yêu cầu POST. Tôi có thể cần số n số hàng, xử lý chúng, sau đó thực hiện n tiếp theo?

Tôi tự hỏi liệu có ai có lời khuyên nào về cách thực hiện tốt nhất điều này không?

(ps. Tôi đã tìm kiếm trang web nhưng tôi không tìm thấy bất kỳ câu hỏi nào tương tự như vậy.)

Cảm ơn.

+0

[DataImportHandler] (http://wiki.apache.org/solr/DataImportHandler)? – nikhil500

+0

Tôi đọc về điều đó, nhưng nó không phải là ánh xạ trực tiếp từ column-to-indexField, có một phép biến đổi nhỏ được áp dụng, do đó muốn thực hiện điều này trong mã. – C0deAttack

+2

DIH hỗ trợ nhiều [máy biến áp] (http://wiki.apache.org/solr/DataImportHandler#Transformer). Bạn cũng có thể viết [máy biến áp tùy chỉnh] (http://wiki.apache.org/solr/DIHCustomTransformer). Tôi sẽ khuyên bạn nên sử dụng DIH nếu có thể - Tôi nghĩ rằng nó sẽ cần số tiền ít nhất của mã hóa và sẽ nhanh hơn POSTING các tài liệu. – nikhil500

Trả lời

1

tôi đã sử dụng những gợi ý từ nikhil500:

DIH không hỗ trợ nhiều máy biến áp. Bạn cũng có thể viết máy biến áp tùy chỉnh.Tôi sẽ khuyên bạn nên sử dụng DIH nếu có thể - Tôi nghĩ rằng nó sẽ cần số tiền ít nhất của mã hóa và sẽ nhanh hơn POSTING các tài liệu. - nikhil500 6 tháng 2 lúc 17:42

1

Nếu bạn muốn cân bằng giữa POSTING tất cả tài liệu cùng một lúc và thực hiện một POST cho mỗi tài liệu, bạn có thể sử dụng hàng đợi để thu thập tài liệu và chạy một chuỗi riêng biệt gửi tài liệu khi bạn đã thu thập đủ. Bằng cách này bạn có thể quản lý bộ nhớ so với vấn đề thời gian yêu cầu.

0

Tôi đã từng phải tải lên ~ 3000 hàng (mỗi 5 trường) từ DB đến Solr. Tôi đã tải lên từng tài liệu một cách riêng biệt và thực hiện một cam kết duy nhất. Toàn bộ hoạt động chỉ mất vài giây, nhưng một số tải lên (8 trong số 3000) đã thất bại.

Điều gì đã hoạt động hoàn hảo là tải lên theo lô 50 trước khi cam kết. 50 có thể rất thấp. Có giới hạn được đề xuất cho số tài liệu bạn có thể tải lên trước khi thực hiện cam kết. Nó phụ thuộc vào kích thước của tài liệu.


Nhưng sau đó, đây là thao tác một lần mà bạn có thể giám sát bằng tập lệnh bị tấn công. Hoạt động tiếp theo có hoạt động giúp bạn lập chỉ mục 100.000 hàng cùng một lúc không? Hoặc bạn có thể thoát khỏi việc lập chỉ mục chỉ vài trăm tài liệu được cập nhật cho mỗi hoạt động không?

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