2013-04-13 47 views
45

Gần đây tôi đã bắt đầu làm việc với Cơ sở dữ liệu Cassandra. Bây giờ tôi đang trong quá trình đánh giá mà Cassandra client chúng ta nên đi tiếp với.Số API của Cassandra Client Java API

Tôi đã thấy các bài đăng khác nhau về stackoverflow về ứng dụng khách nào sử dụng cho Cassandra nhưng không có câu trả lời dứt khoát nào.

Nhóm của tôi đã yêu cầu tôi thực hiện một số nghiên cứu về điều này và đưa ra một số pros and cons nhất định cho mỗi Cassandra Client API’s trong Java. Như tôi đã đề cập, gần đây tôi đã tham gia với Cassandra do đó không có nhiều ý tưởng tại sao một số người chọn Pelops client và tại sao một số người nhất định đi với Astyanax và một số khách hàng khác.

Tôi biết những điều ngắn gọn về từng khách hàng của Cassandra, theo đó tôi có nghĩa là tôi có thể thực hiện công việc đó và bắt đầu đọc và ghi vào cơ sở dữ liệu Cassandra.

Dưới đây là thông tin tôi có cho đến nay.

Cassandra API

  • Hector (Sản xuất-Ready)
    Ổn định nhất trong các API Java, sẵn sàng cho giờ cao điểm.

  • Astyanax (Up and Comer)
    API Java sạch từ Netflix. Nó không được sử dụng rộng rãi như Hector, nhưng nó chắc chắn.

  • Kundera (The NoSQL ORM)
    JPA tuân thủ, đây là tiện dụng khi bạn muốn tương tác với Cassandra qua đối tượng.
    Điều này hạn chế bạn phần nào ở chỗ bạn sẽ không thể có số động cột/tên, v.v. Nhưng nó cho phép bạn chuyển qua ORM hoặc tập trung lưu trữ vào Cassandra để sử dụng truyền thống hơn.

  • Pelops
    Tôi chỉ sử dụng Pelops một thời gian ngắn. Đó là một API chuyển tiếp thẳng, nhưng dường như không có động lực đằng sau nó.

  • PlayORM (ORM không có ràng buộc?)
    Tôi vừa nghe về điều này. Dường như nó đang cố gắng giải quyết trở kháng không phù hợp giữa các ORM dựa trên JPA truyền thống và NoSQL bằng cách giới thiệu JQL. Có vẻ như đầy hứa hẹn.

  • Tiết kiệm (Tránh tôi!)
    Đây là API "cấp thấp".

Dưới đây là ưu tiên của chúng tôi trong việc quyết định Cassandra Client -

  • ưu tiên đầu tiên là: độ trễ chi phí thấp, asynch API, và độ tin cậy/ổn định cho môi trường sản xuất.
    (ví dụ: một API thân thiện với người dùng hơn có thể có trong DAL kết thúc tốt nhất ứng dụng khách).
  • Kết nối tổng hợp và nhận thức phân vùng là một số tính năng tốt khác cần có.
  • Có khả năng phát hiện bất kỳ nút mới nào đã được thêm.
  • Tốt Hỗ trợ cũng như (như chỉ bởi hiệu trưởng bên dưới)

bất cứ ai có thể cung cấp một vài suy nghĩ về vấn đề này? Và cũng có bất kỳ ưu và khuyết điểm nào cho mỗi Cassandra Client và khách hàng nào cũng có thể đáp ứng các yêu cầu của tôi cũng sẽ được trợ giúp rất nhiều.

Tôi tin rằng, chủ yếu là tôi sẽ quay vòng quanh Astyanax client or New Datastax client that uses Binary protocol Tôi đoán dựa trên nghiên cứu của tôi cho đến nay. Nhưng không có thông tin nào đó để quay lại nghiên cứu của tôi và trình bày nó cho nhóm của tôi.

Bất kỳ sự so sánh nào giữa khách hàng Astyanax và ứng dụng khách Datastax mới (sử dụng giao thức nhị phân mới) sẽ giúp ích rất nhiều.

Nó sẽ giúp ích rất nhiều cho tôi trong nghiên cứu của tôi và sẽ nhận được rất nhiều kiến ​​thức về điều này từ những người khác nhau đã sử dụng các khách hàng khác nhau trong quá khứ.

+3

Bạn cũng có thể thêm cassandra-jdbc vào danh sách https://code.google.com/a/apache-extras.org/p/cassandra-jdbc/ – phatfingers

+0

phatfingers điểm tốt. Biết thêm một thứ nữa. Mát mẻ. – ferhan

+0

Tôi đã chọn astyanax tại một số điểm và tôi có thể nói chắc chắn rằng nó dễ sử dụng và rất ổn định. Vài gợi ý: [trình điều khiển datastax là beta hiện tại] (https://github.com/datastax/java-driver/blob/master/README.rst); [Astyanax trên giao thức gốc] (https://github.com/Netflix/astyanax/issues/280) –

Trả lời

23

Thrift ngày càng trở nên một API cũ:

Trước tiên, bạn nên biết rằng các API Thrift sẽ không thể nhận được các tính năng mới; nó có khả năng tương thích ngược và không được đề xuất cho các dự án mới.
- the paul

Vì vậy, tôi muốn tránh Thrift API dựa (tiết kiệm được chỉ giữ cho khả năng tương thích ngược).

Nói rằng nếu bạn cần sử dụng API dựa tiết kiệm, tôi muốn dùng Astyanax. Astyanax rất dễ sử dụng (so với các API tiết kiệm khác nhưng kinh nghiệm cá nhân của tôi là trình điều khiển Datastax thậm chí còn dễ dàng hơn).

Vì vậy, bạn nên xem Datastax's API (and GitHub repo)? Tôi không chắc chắn nếu có bất kỳ phiên bản được biên dịch của API để tải xuống nhưng bạn có thể dễ dàng xây dựng nó với Maven. Ngoài ra, nếu bạn nhìn vào nhật ký cam kết của GitHub repo, nó sẽ trải qua các cập nhật rất thường xuyên.

Trình điều khiển hoạt động độc quyền với CQL3 và không đồng bộ nhưng được cảnh báo rằng Cassandra 1.2 là phiên bản được hỗ trợ sớm nhất.

Performance
Astyanax là tiết kiệm dựa và ổ Datastax là giao thức nhị phân. Dưới đây là số mới nhất benchmarks Tôi có thể tìm thấy giữa tiết kiệm và CQL (lưu ý những điều này chắc chắn đã lỗi thời). Nhưng trong sự công bằng, sự khác biệt nhỏ về hiệu suất thể hiện trong các tiêu chuẩn này sẽ hiếm khi quan trọng.

hỗ trợ asynch hỗ trợ asynch
Datastax là một lợi thế nhất định so với Astyanax (Netflix tried implementing nó nhưng quyết định không).

Tài liệu
Tôi thực sự không thể tranh luận chống lại Netflix's wiki. Các tài liệu là tuyệt vời và cập nhật của nó khá thường xuyên. Wiki của họ bao gồm các ví dụ mã và bạn có thể tìm thấy các kiểm tra trong mã nguồn nếu bạn cần xem mã tại nơi làm việc. Tôi đã cố gắng tìm bất kỳ tài liệu nào của trình điều khiển Datastax, tuy nhiên kiểm tra được cung cấp trong kho lưu trữ GitHub để đó là điểm khởi đầu.

Cũng có một cái nhìn tại this answer (tốt .. không phải của tôi anyway) Nó nhìn vào một số lợi thế/bất lợi của tiết kiệm và CQL.

+0

Vâng. Đó là hữu ích nhưng như bạn đã đề cập nó sẽ không có được các tính năng mới sau đó nó không có ý nghĩa để thậm chí đánh giá tôi đoán. Nhưng đó là một điều tốt để biết nó hỗ trợ async là tốt. – ferhan

+0

@TechGeeky Trình điều khiển dữ liệu ** sẽ ** nhận các tính năng mới, tiết kiệm của nó sẽ không nhận được các tính năng mới. –

3

Tôi cũng sẽ thêm hỗ trợ phong nha. Chúng tôi đăng câu trả lời để playORM tất cả thời gian trên ngăn xếp tràn;). Nó cũng sắp bắt đầu hỗ trợ mongodb (công việc gần như đã hoàn thành) vì vậy bất kỳ khách hàng nào cũng có thể chạy trên mongodb hoặc cassandra. Nó có ngôn ngữ truy vấn riêng của nó sao cho cổng này hoạt động tốt. Bạn luôn có quyền truy cập vào giao diện astyanax thô khi thực sự cần tốc độ.

Ngoài ra, lưu ý của bạn về asynch ... tiết kiệm trước đây không hỗ trợ asynch vì vậy không có khách hàng nào thực hiện hoặc khi họ tạo mã tiết kiệm. Vì điều đó đã thay đổi, tôi không biết khách hàng nào đã thêm công cụ asynch vào.

Tôi biết hbase có một ứng dụng khách mặc định. Dù sao, chỉ nghĩ rằng tôi sẽ thêm 2 xu của tôi trong trường hợp nó giúp một chút. EDIT: Gần đây tôi đã có mã nguồn được tạo ra bởi Cassandra và nó không phải là một api rất tốt cho việc phát triển async với phương thức send và recv() nhưng bạn không biết khi nào nên gọi phương thức recv. Aaron morton trên danh sách người dùng cassandra có một blog về cách bạn thực sự có thể làm điều đó nhưng nó không phải là sạch ở tất cả ... phải lấy bộ chọn từ tiết kiệm sâu xuống và làm một số công cụ để bạn biết khi nào nên gọi phương pháp recv .. công cụ khó chịu.

sau, Dean

+0

Tôi đã thử Kundera. Tôi cũng muốn thử playORM trước khi quyết định đi con đường nào. Vui lòng cập nhật trải nghiệm mới nhất của bạn với playORM. Có hỗ trợ phiên bản khung chơi mới hơn (v2.3) không? –

2

Tôi đã sử dụng Hector, Astyanax và Tiết kiệm trực tiếp. Tôi cũng đã sử dụng máy khách Python PyCassa.

Các tính năng mà tôi quan trọng và khác biệt tìm thấy là:

  • Dễ sử dụng API
  • hỗ trợ cột composite
  • kết nối tổng hợp
  • trễ
  • Documentation

Một trong những vấn đề chính là ting các loại chính xác. Bạn muốn có thể vượt qua trong thời gian dài, Strings, byte [], vv .. Cả Hector và Astyanax đều giải quyết vấn đề này bằng cách sử dụng các đối tượng Serializer. Trong Astyanax bạn chỉ định chúng cao hơn chuỗi nên bạn phải chỉ định chúng ít thường xuyên hơn. Trong Hector cú pháp thường rất khó khăn và khó thích ứng nếu bạn thay đổi lược đồ của mình.

Vì Python có các kiểu động, việc xử lý điều này dễ dàng hơn nhiều trong PyCassa. Vì nó không phải là một lựa chọn cho bạn tôi sẽ không nói nhiều về nó, nhưng tôi thấy nó dễ nhất để sử dụng (cho đến nay) nhưng cũng khá chậm.

Hỗ trợ cột tổng hợp rất khó hiểu trong Hector.Astyanax có chú thích để đơn giản hóa điều này.

Theo như tôi biết, kết nối tổng hợp giống nhau đối với Hector và Astyanax. Cả hai sẽ tránh các máy chủ bị hỏng và khám phá các máy chủ mới được thêm vào vòng. Cả hai tính năng này đều rất quan trọng đối với độ tin cậy và khả năng bảo trì. Pelops dường như có những tính năng này nhưng tôi chưa bao giờ thử nó.

Sự khác biệt chính giữa Astyanax và Hector là tối ưu hóa độ trễ. Astyanax có khả năng định tuyến các yêu cầu đọc và ghi vào một nút bản sao, có khả năng tránh được một hop mạng bổ sung. Điều này có thể làm giảm độ trễ bằng một vài phần nghìn giây.

Cuối cùng, Astyanax có tài liệu kém, nhưng có vẻ như đã được cải thiện nhiều.

Lợi thế duy nhất của Hector tôi có thể thấy hôm nay là nó được sử dụng rộng rãi hơn nên có lẽ ít lỗi hơn. Nhưng Astyanax có một bộ tính năng tốt hơn.

8

Tôi muốn giới thiệu trình điều khiển java Datastax cho Cassandra http://www.datastax.com.

Đối với JPA như hỗ trợ, hãy thử công cụ lập bản đồ của tôi. http://valchkou.com/cassandra-driver-mapping.html

Chú thích hướng dẫn Không có tệp ánh xạ, không có tập lệnh, không có tệp cấu hình. Không cần tập lệnh DDL. Giản đồ được tự động đồng bộ hóa với định nghĩa đối tượng.

mẫu Cách sử dụng:

Entity entity = new Entity(); 
    mappingSession.save(entity); 
    entity = mappingSession.get(Entity.class, id); 
    mappingSession.delete(entity); 

sẵn trên maven trung tâm

<dependency> 
     <groupId>com.valchkou.datastax</groupId> 
     <artifactId>cassandra-driver-mapping</artifactId>   
    </dependency> 
1

Tôi có một đề nghị tương tự như Valchkou. Trình điều khiển CQL của DataStax java CQL, rất tốt. Tôi đã thử trò chơi astyanax, kundera và buffalosw. Astyanax rất thấp và một số phức tạp. Kundara và playorm là các ORM chung cho các cơ sở dữ liệu nosql và rất phức tạp để thiết lập và bắt đầu.

Apast dữ liệu tương tự như trình điều khiển JDBC và bạn phải nhúng các câu lệnh CQL vào DAO của bạn và viết một số dòng mã để tải và lưu các thực thể của bạn. Để giải quyết vấn đề này, tôi đã viết một trình ánh xạ đối tượng java có tên là cassandra-jom, được xây dựng xung quanh trình điều khiển datastax cql. Chú thích Cassandra-jom rất giống với chú thích JPA/Hibernate và thậm chí có thể tạo/cập nhật lược đồ gia đình cột của bạn từ mô hình đối tượng của bạn. Nó rất dễ sử dụng và đáng tin cậy và được sử dụng trong các ứng dụng web trực tiếp khác của tôi. Kiểm tra nó tại trang github của nó.

https://github.com/w3cloud/cassandra-jom