2012-10-03 16 views
18

Tôi đang cố gắng hiểu Cassandra và cách cấu trúc các gia đình cột của tôi (CF) nhưng nó khá khó vì tôi đã quen với cơ sở dữ liệu quan hệ.Phím Cassandra tự động tăng số

Ví dụ: nếu tôi tạo đơn giản users CF và tôi cố gắng chèn hàng mới, làm cách nào tôi có thể tạo một khóa gia tăng như trong MySQL?

Tôi thấy rất nhiều ví dụ nơi bạn chỉ cần đặt tên người dùng thay vì ID duy nhất và điều đó có ý nghĩa một chút, nhưng nếu tôi muốn người dùng có tên người dùng trùng lặp thì sao?

Ngoài ra làm cách nào tôi có thể thực hiện tìm kiếm khi những gì tôi hiểu cassandra không hỗ trợ các toán tử >, vì vậy, chẳng hạn như select * from users where something > something2 sẽ không hoạt động.

Và có lẽ câu hỏi quan trọng nhất về nhóm là gì? Tôi có cần phải truy xuất tất cả dữ liệu và sau đó lọc nó với bất kỳ ngôn ngữ nào tôi đang sử dụng không? Tôi nghĩ điều đó sẽ làm chậm hệ thống của tôi rất nhiều.

Vì vậy, về cơ bản tôi cần một số giải thích ngắn gọn về cách bắt đầu với Cassanda.

Trả lời

16

Câu hỏi của bạn khá chung chung, nhưng hãy để tôi xem xét nó. Trước tiên, bạn cần lập mô hình dữ liệu của mình theo các truy vấn của bạn. Với RDBMS, bạn lập mô hình dữ liệu của mình ở một số biểu mẫu chuẩn hóa, sau đó tối ưu hóa sau cho các truy vấn cụ thể của bạn. Bạn không thể làm điều này với Cassandra; bạn phải ghi dữ liệu theo cách bạn định đọc nó. Thường thì điều này có nghĩa là viết nhiều hơn một cách. Nói chung, nó giúp hoàn toàn làm suy nghĩ RDBMS của bạn nếu bạn muốn làm việc hiệu quả với Cassandra.

phím Về:

  • Chúng được sử dụng trong Cassandra là đơn vị phân phối trên chiếc nhẫn. Vì vậy, khóa của bạn sẽ được băm và gán một "chủ sở hữu" trong vòng. Sử dụng RandomPartitioner để đảm bảo phân phối đồng đều

  • Giả sử bạn sử dụng RandomPartitioner (bạn nên), các phím không được sắp xếp. Điều này có nghĩa là bạn không thể yêu cầu một loạt các khóa. Tuy nhiên, bạn có thể yêu cầu danh sách các phím trong một truy vấn.

  • Các khóa có liên quan trong một số kiểu máy và không có trong các mô hình khác. Nếu mô hình của bạn yêu cầu truy vấn theo từng khóa, bạn có thể sử dụng bất kỳ giá trị duy nhất nào mà ứng dụng của bạn biết (chẳng hạn như UUID). Đôi khi các khóa là các giá trị sentinel, chẳng hạn như một kỷ nguyên Unix đại diện cho sự khởi đầu của ngày. Điều này cho phép bạn đưa Cassandra một loạt các khóa đã biết, sau đó nhận được một loạt các dữ liệu được sắp xếp theo cột (xem bên dưới).

Về vị từ truy vấn:

  • Bạn có thể nhận được phạm vi của dữ liệu giả sử bạn mô hình hóa một cách chính xác để trả lời truy vấn của bạn.

  • Vì cột được viết theo thứ tự sắp xếp, bạn có thể truy vấn một phạm vi từ cột A đến cột n bằng truy vấn slice (rất nhanh). Bạn cũng có thể sử dụng các cột tổng hợp để trừu tượng cơ chế này một chút.

  • Bạn có thể sử dụng chỉ mục phụ trên các cột nơi bạn có số lượng thẻ thấp - điều này cung cấp cho bạn chức năng truy vấn theo giá trị.

  • Bạn có thể tạo các chỉ mục của riêng mình nơi dữ liệu được sắp xếp theo cách bạn cần.

Về nhóm:

Tôi đoán bạn đang đề cập đến việc tạo ra uẩn. Nếu bạn cần dữ liệu của mình trong thời gian thực, bạn sẽ muốn sử dụng một số cơ chế bên ngoài (như Storm) để theo dõi dữ liệu và liên tục cập nhật tập hợp có liên quan của bạn thành CF. Nếu bạn đang tạo tổng hợp như là một phần của quá trình xử lý hàng loạt, Cassandra có tích hợp tuyệt vời với Hadoop, cho phép bạn viết các công việc bản đồ/giảm bớt trong Pig, Hive hoặc trực tiếp bằng ngôn ngữ bạn chọn.

1

Bạn có thể muốn xem PlayOrm. Trong khi tôi đồng ý bạn cần phải thoát ra khỏi RDBMS suy nghĩ đôi khi có khóa chính của bạn như userid chỉ là sự lựa chọn sai. Đôi khi nó là sự lựa chọn đúng (phụ thuộc vào yêu cầu của bạn).

PlayOrm là sự kết hợp giữa các khái niệm noSQL và quan hệ khi bạn cần cả hai và bạn có thể thực hiện Scalable-SQL với các phép nối và mọi thứ. Bạn chỉ cần phân vùng các bảng mà bạn tin rằng sẽ phát triển thành hàng tỷ nghìn tỷ hàng và bạn có thể truy vấn vào các phân vùng đó. Ngay cả với CQL, bạn cần phải phân vùng bảng của bạn. Bạn có thể phân vùng bằng cách nào? thời gian là tốt cho một số trường hợp sử dụng. Những người khác có thể được phân vùng bởi khách hàng vì mỗi khách hàng thực sự là một cơ sở dữ liệu nhỏ trong cụm noSQL của bạn.

Theo các phím, PlayOrm tạo khóa "cụm" duy nhất là tên máy chủ-uniqueidinThatHost, về cơ bản giống như một TimeUUID ngoại trừ khá ngắn hơn và dễ đọc hơn khi chúng tôi sử dụng tên máy chủ trong cụm a1, a2, a3, v.v. vv.

7

Đối với câu hỏi đầu tiên của bạn:

tôi có thể làm gia tăng quan trọng như thế nào trong mysql

không, không thực sự - không có nguồn gốc từ Cassandra. How to create auto increment IDs in Cassandra - Bạn có thể kiểm tra tại đây để biết thêm thông tin: http://srinathsview.blogspot.ch/2012/04/generating-distributed-sequence-number.html

Câu hỏi thứ hai của bạn là nhiều hơn về cách lưu trữ và mô hình dữ liệu Cassandra của bạn.

Kiểm tra tùy chọn tìm kiếm của stackoverflow. Rất nhiều câu hỏi thú vị!

  1. Switching from MySQL to Cassandra - Pros/Cons?
  2. Cassandra Data Model
  3. Cassandra/NoSQL newbie: the right way to model?
  4. Apache Cassandra schema design
  5. Knowledge sources for Apache Cassandra

Quan trọng nhất, When NOT to use Cassandra?

+0

Cassandra sup cổng quầy (https://cassandra.apache.org/doc/cql3/CQL.html#counters), có một số hạn chế mặc dù. –