Kỹ thuật lập chỉ mục dữ liệu hiệu quả nhất là gì


10

Như chúng ta đã biết, có một số kỹ thuật lập chỉ mục dữ liệu, được sử dụng bởi các ứng dụng lập chỉ mục nổi tiếng, như Lucene (cho java) hoặc Lucene.NET (cho .NET), MurMurHash, B + Tree, v.v ... Đối với No-Sql / Object Cơ sở dữ liệu định hướng (mà tôi cố gắng viết / chơi một chút xung quanh với C #), bạn đề xuất kỹ thuật nào?

Tôi đã đọc về MurMurhash-2 và các bình luận v3 đặc biệt nói rằng Murmur rất nhanh. Lucene.Net cũng có ý kiến ​​tốt về nó. Nhưng những gì về dấu chân bộ nhớ của họ nói chung? Có giải pháp hiệu quả nào sử dụng ít dấu chân hơn (và tất nhiên nếu thích nhanh hơn) so với Lucene hoặc Murmur? Hoặc tôi nên viết một cấu trúc chỉ mục đặc biệt để có kết quả tốt nhất?

Nếu tôi cố gắng tự viết, thì có bất kỳ thang đo nào được chấp nhận để lập chỉ mục tốt, giống như 1% nút dữ liệu hoặc 5% nút dữ liệu không? Bất kỳ gợi ý hữu ích sẽ được đánh giá cao.

Câu trả lời:


10

Tôi nghĩ rằng bạn đã làm hỏng một số điều trong câu hỏi của bạn. Lucene (tôi không biết gì về Lucene, NET, nhưng tôi cho là giống nhau) là một thư viện được sử dụng để phân tích, phân tách mã thông báo và lưu trữ tài liệu để có thể truy vấn và truy xuất chúng sau này. Lucene có một mô hình khá cũ nhưng hiệu quả, nó sử dụng các cây đảo ngược để tìm và lấy tài liệu. Không có thêm thông tin chi tiết, tất cả các tài liệu được chia thành các mã thông báo (thuật ngữ) và cho mỗi thuật ngữ được duy trì cấu trúc dữ liệu, lưu trữ tất cả các tài liệu có chứa thuật ngữ đã cho. Vì cấu trúc dữ liệu có thể được sử dụng BTree, bảng băm và trong các phiên bản chính mới nhất, bạn thậm chí có thể cắm vào cấu trúc dữ liệu của riêng mình.

Một BTree (xem trang Wikipedia để biết thêm chi tiết), là một loại cấu trúc dữ liệu cây, thích hợp để làm việc với các khối dữ liệu lớn và thường được sử dụng để lưu trữ các cấu trúc giống như cây trên đĩa. Đối với trong bộ nhớ, cây khác hoạt động tốt hơn.

Hàm băm Murmur (xem trang Wikipedia để biết thêm chi tiết), là một nhóm các hàm băm được sử dụng trong bảng băm. Việc thực hiện bảng băm không quan trọng, nó có thể là một triển khai chuỗi tiêu chuẩn hoặc sơ đồ địa chỉ băm mở nâng cao hơn. Ý tưởng là các bảng băm cho phép một người nhận được một khóa nhanh, từ một bộ khóa không có thứ tự và có thể trả lời các tác vụ như: đây có phải là một phần của bộ khóa này không? giá trị liên quan đến khóa này là gì?

Bây giờ trở lại vấn đề chính của bạn. Bạn có một thư viện (Lucene) và với các cấu trúc dữ liệu, cả hai cấu trúc dữ liệu đều được sử dụng trong Lucene. Bây giờ bạn thấy rằng không thể trả lời câu hỏi của bạn trong các điều khoản này vì chúng không thể so sánh được.

Tuy nhiên, liên quan đến bạn dấu chân và phần hiệu suất của câu hỏi. Trước hết bạn phải biết loại hoạt động nào bạn cần thực hiện.

Bạn chỉ cần nhận giá trị cho khóa, hay bạn cần tìm tất cả các yếu tố trong một phạm vi? Nói cách khác bạn có cần đặt hàng hay không? Nếu bạn làm, hơn một cái cây có thể giúp đỡ. Nếu bạn không, hơn một bảng băm, nhanh hơn có thể được sử dụng thay thế.

Bạn có nhiều dữ liệu không phù hợp với bộ nhớ không? Nếu có hơn một giải pháp dựa trên đĩa sẽ có ích (như BTree). Nếu dữ liệu của bạn phù hợp với bộ nhớ, hơn là sử dụng giải pháp trong bộ nhớ nhanh nhất và chỉ sử dụng đĩa làm bộ lưu trữ (với cấu trúc khác, đơn giản hơn nhiều).


Cảm ơn bạn rất nhiều Rapaio :) Những điểm bạn đã cho tôi rất hữu ích và hiểu rõ hơn..Since Tôi là một nhà phát triển .NET và tò mò về C (tôi bắt đầu tìm hiểu) và ancd mới, nhanh, đáng tin cậy, có thể mở rộng tất nhiên có thể kiểm soát hoàn toàn - trong một thời gian ngắn: rất hào hứng- kỹ thuật..Vậy tôi cần học rất nhiều..Để học, tôi cố gắng đọc thật nhiều tài liệu nhưng như bạn có thể đoán tôi đang ở vạch xuất phát .. Tôi không biết rằng BTree có lợi thế trên đĩa (Trong thế giới .Net, rất nhiều nhà văn giải thích nó như sau: Cấu trúc dữ liệu phân cấp như Linked-List..Không có thêm!) Cảm ơn bạn rất nhiều lần nữa
sihirbazzz

Và nếu bạn cho phép tôi, cho đến khi có một lời giải thích / câu trả lời chất lượng cao hơn câu trả lời của bạn, tôi muốn chấp nhận câu trả lời này .. Và BTW, Lucene.NET là một triển khai .NET của Lucene
sihirbazzz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.