2010-02-16 15 views
7

Cách dễ nhất để mô phỏng một bảng cơ sở dữ liệu với chỉ mục trong kho lưu trữ giá trị khóa là gì? Kho lưu trữ giá trị khóa có NO queryed queries và NO ordered keys.Cách dễ nhất để mô phỏng một bảng cơ sở dữ liệu với chỉ mục trong kho lưu trữ giá trị khóa là gì?

Những điều tôi muốn để mô phỏng (theo thứ tự ưu tiên):

  1. Tạo bảng
  2. Thêm cột
  3. Tạo chỉ số
  4. Query dựa trên chính
  5. Query chính dựa trên tùy ý cột
+3

Mô phỏng khía cạnh nào? SQL tương thích? Chất lượng hiệu suất? Chỉ cần nhận được các đối tượng phù hợp dựa trên một khóa nguyên nguyên? –

+0

Bất kỳ khía cạnh nào có thể được triển khai theo cách thực hiện. – Zubair

+0

Câu hỏi của bạn không rõ ràng và "giải thích" của bạn không làm rõ bất cứ điều gì. Trả lời ý kiến ​​của @ MB willg và bạn phản hồi tốt hơn. –

Trả lời

4

Nếu bạn sử dụng Redis (cửa hàng khóa-giá trị nâng cao hỗ trợ chuỗi, danh sách, bộ, v.v.) Điều này khá dễ dàng. Tôi đã phát triển một C# redis client có hỗ trợ gốc để lưu trữ các mô hình dữ liệu của POCO. Những POCO chính xác này có thể được sử dụng bởi OrmLite để lưu trữ nó trong một RDBMS.

Bằng cách Redis nhanh, tôi có benchmark lưu trữ và truy lục toàn bộ Cơ sở dữ liệu Northwind (3202 bản ghi) trong dưới 1,2 giây (chạy bên trong UnitTest trên iMac 3yo).

tôi lưu trữ các đối tượng trong hai cách

  • thực thể riêng biệt, nơi tôi kết hợp các loại tên lớp và Primary Key để tạo ra một ví dụ khóa duy nhất urn:user:1
    • sau đó tôi duy trì một bộ riêng biệt của khóa chính (trong một Redis Set) để theo dõi tất cả các đơn vị của tôi, sử dụng một chìa khóa như: ids:user
  • Trong danh sách phía máy chủ Redis - có vai trò rất giống bảng có hỗ trợ phân trang, sử dụng khóa như: lists:user
+0

Tôi đã sử dụng Redis trong quá khứ, và có, nó là nhanh chóng, tôi yêu nó, đặc biệt là tất cả các phạm vi, thiết lập và nguyên tử (incr và decr) hoạt động nó có. Chỉ là bây giờ tôi đang xử lý một hệ thống lưu trữ hàng tỷ bản ghi trong cơ sở dữ liệu tự động mở rộng (Riak), vì vậy Redis không hoàn toàn phù hợp với điều này, vì mọi thứ phải phù hợp với bộ nhớ – Zubair

+0

cho phép bạn lưu trữ 10 triệu khóa (với bất kỳ giá trị có kích thước nào) chỉ sử dụng bộ nhớ 1.6 GB, trong khi vẫn còn lại nhanh chóng - xem: http://antirez.com/post/redis-virtual-memory-story.html – mythz

+0

Vâng, tôi đã thấy điều đó, rất tuyệt vời !! Trong thực tế, ngay cả Riak có một Redis dựa trên phụ trợ. Nó vẫn không quy mô đến hàng tỷ hồ sơ mặc dù, nhưng rất tốt đẹp. – Zubair

2

Sử dụng từ khóa bắt buộc hoặc từ điển. Nếu bạn muốn các giá trị khóa duy nhất, bạn có thể sử dụng GUID hoặc mã băm.

+0

Bạn có nghĩa là một khóa cho khóa chính không? Và từ điển phù hợp ở đâu? – Zubair

+0

Trong thực tế, tôi nghĩ rằng một hashtable có lẽ sẽ phù hợp với bạn tốt hơn. Từ điển chỉ là một tùy chọn có thể khác. –

1

Kho lưu trữ khóa-giá trị phải hỗ trợ sắp xếp các khóa và truy cập bằng các phím.

Sau đó, bạn nên tạo hai bộ từ điển:

id -> payload 

col1, id -> NULL 

, nơi payload nên chứa tất cả các dữ liệu bảng cơ sở dữ liệu sẽ chứa, và các phím của từ điển thứ hai nên chứa giá trị của (col1, id) từ mỗi mục nhập của từ điển đầu tiên.

+0

Kho lưu trữ giá trị khóa mà tôi đang sử dụng không hỗ trợ sắp xếp các khóa hoặc truy cập dao động. – Zubair

+0

Ngoài ra, bạn có thể thuật lại câu trả lời, tôi không hiểu phần về từ điển. Còn col1 là gì? – Zubair