2012-01-28 16 views
9

Tôi đã đọc về LevelDB và phát hiện ra rằng:Làm cách nào để có thể xây dựng chỉ mục cơ sở dữ liệu ở trên cùng của kho khóa/giá trị?

phiên bản tiếp theo của trình duyệt Chrome bao gồm một thực hiện các API IndexedDB HTML5 mà được xây dựng trên đầu trang của LevelDB

IndexedDB cũng là một đơn giản kho khóa/giá trị có khả năng lập chỉ mục dữ liệu.

Câu hỏi của tôi là: làm cách nào để có thể tạo chỉ mục trên đầu trang của kho khóa/giá trị? Tôi biết rằng một chỉ mục là một B-Tree và tôi hiểu cách dữ liệu được lập chỉ mục trong cơ sở dữ liệu. Nhưng làm thế nào để lưu trữ khóa/giá trị như LevelDB được sử dụng để tạo chỉ mục cơ sở dữ liệu?

+0

@AndyDent answer is good. Để xem cách thực hiện trong thực hành, hãy kiểm tra https://github.com/ren85/linqdb – ren

Trả lời

6

Tính năng quan trọng không phải là nó hỗ trợ các trình so sánh tùy chỉnh mà nó hỗ trợ lặp lại theo thứ tự thông qua các khóa và do đó tìm kiếm trên các khóa một phần. Bạn có thể mô phỏng các trường trong các khóa chỉ bằng cách sử dụng các quy ước để tách các giá trị chuỗi. Nhiều lớp kịch bản nằm trên đỉnh leveldb sử dụng cách tiếp cận đó.

Chế độ xem từ điển từ điển của cửa hàng Khóa-giá trị là bạn chỉ có thể biết liệu khóa có hiện diện hay không bằng đối sánh chính xác. Nó không thực sự khả thi khi sử dụng chỉ một cửa hàng KV làm cơ sở cho một chỉ mục cơ sở dữ liệu.

Ngay sau khi bạn có thể lặp qua các khóa bắt đầu từ một phần khớp, bạn có đủ để cung cấp các hoạt động tìm kiếm và sắp xếp cho một chỉ mục.

4

Chỉ cần một vài điều, LevelDB hỗ trợ sắp xếp dữ liệu sử dụng một comparer tùy chỉnh, từ page you linked to:

Theo trang web dự án tính năng chính là:

  • Keys và giá trị byte tùy ý mảng.
  • Dữ liệu được lưu trữ được sắp xếp theo khóa.
  • Người gọi có thể cung cấp chức năng so sánh tùy chỉnh để ghi đè thứ tự sắp xếp.
  • ....

Vì vậy, LevelDB có thể chứa dữ liệu này có thể được sắp xếp/lập chỉ mục dựa trên 1 thứ tự sắp xếp.

Nếu bạn cần một số trường có thể lập chỉ mục, bạn chỉ có thể thêm B-Tree của riêng bạn hoạt động trên đầu trang của LevelDB. Tôi sẽ tưởng tượng rằng đây là loại phương pháp mà trình duyệt Chrome sử dụng, nhưng tôi đoán vậy.

Bạn luôn có thể xem qua the Chrome source.

+1

bạn sẽ không cần phải sử dụng một cây B trên đầu trang trên leveldb, thay vào đó bạn nên tạo một cấp bậc khác để phục vụ như một chỉ mục cho mỗi cánh đồng. (có hiệu lực bắt chước những gì một cơ sở dữ liệu quan hệ nào khi bạn thêm các chỉ mục vào một bảng) nhưng khi tôi nhìn vào leveldb, tôi không thấy các giao dịch db chéo. –

+0

@DanD. Tôi thứ hai! +1 cho nhận xét! Tôi sẽ thêm một điều nữa: [có, không có giao dịch, nhưng bạn có ghi hàng loạt] (http: // stackoverflow.com/questions/9022691/gì-cấu thành-một-giao dịch-lớp-khi-nói-về-cơ sở dữ liệu-hệ thống) và bạn có rất nhiều tính năng khác mà đến gần với một giao dịch ACID. – Kiril

+0

@Lirik Ý tôi là "giao dịch db chéo" là các hành động _atomic liên quan đến nhiều trường hợp leveldb mà leveldb không có hỗ trợ. Mặc dù leveldb không hỗ trợ các hành động nguyên tử trên một cá thể leveldb duy nhất, bạn không thể xây dựng các phép toán nguyên tử trên nhiều cá thể leveldb trong số đó. –

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