2009-10-23 29 views
8

Tôi đang cố gắng bọc đầu quanh các cửa hàng Key-Value như CouchDB và Cassandra. Tôi hiểu lý do tại sao chúng hữu ích nhưng theo như cách chúng thay thế một RDBMS như MySql, tôi không hiểu nó.Tìm hiểu các cửa hàng có giá trị chính

Hãy nói rằng đây là của tôi những gì tôi cần phải lưu trữ:

{123456: {'model' : 'Ford' 
      'color': 'blue' 
      'MPG': 23}} 

Sau đó, tôi cần phải tìm tất cả những chiếc xe có màu xanh.

Cửa hàng khóa-giá trị truy vấn khóa bằng giá trị như thế nào? Tôi đọc một số nơi mà bản đồ-giảm có thể được sử dụng nhưng nhìn vào nguồn gốc của một vài dự án tôi không thể tìm thấy một ví dụ.

Hãy cho tôi biết nếu tôi hỏi đúng câu hỏi.

Trả lời

8

về cơ bản, khi bạn đang sử dụng các cửa hàng trọng điểm có giá trị, bạn đang xây dựng một cơ sở dữ liệu ra khỏi các thành phần tương tự như một cơ sở dữ liệu quan hệ có trong nội bộ. Lý do để làm điều này là có nhiều quyền kiểm soát và linh hoạt hơn trong việc mở rộng quy mô và hiệu suất, hoặc chỉ đơn giản là vì sự đơn giản.

Trong trường hợp này, bạn cần phải lưu trữ tương đương với các hàng trong bảng và chỉ mục dưới dạng hai thứ riêng biệt. Vì vậy, nếu bạn muốn đánh chỉ mục trên màu sắc, sau đó bạn cần phải lưu trữ

{'blue': {123456}} 

trong tương đương với một bảng chỉ mục.

Tất nhiên, một số cửa hàng giá trị khóa cung cấp các cơ chế lập chỉ mục và tìm kiếm cho bạn để không có quy tắc chung phù hợp với tất cả.

+0

Nó có cần phải là: {{'color': 'blue'}: [123456]} Nếu không thì nó sẽ biết màu xanh lam được đề cập đến như thế nào. Còn văn bản thì sao? {'Lorem ipsum dolor ngồi amet, consectetuer adipiscing elit ...': [123456]} Các cửa hàng có giá trị quan trọng có thích tìm kiếm không? – user142006

+1

Tôi giả định rằng chỉ mục sẽ chỉ chứa màu là khóa. Chi tiết về điều này phụ thuộc vào kho khóa-giá trị mà bạn sẽ sử dụng. Bạn đã đề cập đến hai câu trả lời khác nhau trong câu trả lời của bạn vì vậy tôi cho rằng câu hỏi đó là nhiều hơn về một câu hỏi lưu trữ khóa-giá trị chung. Redis, Hadoop, Nội các Tokyo, Metakit, Berkeley db, gdbm đều cung cấp các khả năng khác nhau cho các kho khóa-giá trị. –

2

Bạn sẽ muốn duy trì một kho khóa/giá trị riêng biệt về bản chất là chỉ mục. Nó sẽ có "màu xanh" là chìa khóa, và sau đó một danh sách tất cả các ID từ cửa hàng xe "chính" có màu xanh dương.

Có, đó là nhân đôi chức năng chỉ mục của một rdbms thông thường. Đây là một bài viết hay về cách nhóm FriendFeed tiếp cận vấn đề này và giải quyết về giải pháp này, cùng với lý do của họ (tôi biết, hơi lạ khi họ sử dụng RDBMS như một kho khóa/giá trị, nhưng điểm nói chuyện là lý thuyết âm thanh):
http://bret.appspot.com/entry/how-friendfeed-uses-mysql

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