Một Node hiện đại, giàu tính năng và có khả năng điều chỉnh cao. js cho Apache Cassandra và DSE sử dụng riêng giao thức nhị phân của Cassandra và Ngôn ngữ truy vấn Cassandra
Cài đặt
$ npm install cassandra-driver
Đặc trưng
- Báo cáo Đơn giản, Đã chuẩn bị và Hàng loạt
- IO không đồng bộ, thực thi song song, đường ống yêu cầu
- tổng hợp kết nối
- Phát hiện nút tự động
- Tự động kết nối lại
- Chính sách cân bằng tải và thử lại có thể định cấu hình
- Hoạt động với mọi kích thước cụm
- Trình ánh xạ đối tượng tích hợp
- Cả API dựa trên lời hứa và gọi lại
- Dòng hàng và đường ống
- Hỗ trợ TypeScript tích hợp
Tài liệu
- mục lục tài liệu
- các loại CQL thành các loại JavaScript
- tài liệu API
- Câu hỏi thường gặp
Tìm sự giúp đỡ
Bạn có thể sử dụng danh sách gửi thư của dự án hoặc tạo một vé trên trình theo dõi vấn đề Jira
sử dụng cơ bản
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];
Trình điều khiển hỗ trợ cả lời hứa và gọi lại cho các phương thức không đồng bộ, bạn có thể chọn phương pháp phù hợp với nhu cầu của mình
Lưu ý rằng để có các ví dụ mã ngắn gọn trong tài liệu này, chúng tôi sẽ sử dụng API dựa trên lời hứa của trình điều khiển cùng với từ khóa
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];2
Nếu bạn đang sử dụng DataStax Astra, bạn có thể định cấu hình máy khách của mình bằng cách đặt gói bảo mật và thông tin đăng nhập của người dùng
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];
Chuẩn bị truy vấn của bạn
Sử dụng báo cáo chuẩn bị cung cấp nhiều lợi ích
Các câu lệnh đã chuẩn bị được phân tích cú pháp và chuẩn bị trên các nút Cassandra và sẵn sàng để thực hiện trong tương lai. Ngoài ra, khi chuẩn bị, trình điều khiển sẽ truy xuất thông tin về các loại tham số cho phép ánh xạ chính xác giữa loại JavaScript và loại Cassandra
Trình điều khiển sẽ chuẩn bị truy vấn một lần trên mỗi máy chủ và thực hiện câu lệnh với các tham số ràng buộc
// Use query markers [?] and parameters const query = 'UPDATE users SET birth = ? WHERE key=?'; const params = [ new Date[1942, 10, 1], 'jimi-hendrix' ]; // Set the prepare flag in the query options await client.execute[query, params, { prepare: true }]; console.log['Row updated on the cluster'];
Dòng hàng và đường ống
Khi sử dụng các phương thức
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];3 và
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];4, trình điều khiển sẽ phân tích cú pháp từng hàng ngay khi nhận được, tạo ra các hàng mà không cần đệm chúng
// Reducing a large result client.eachRow[ 'SELECT time, val FROM temperature WHERE station_id=', ['abc'], [n, row] => { // The callback will be invoked per each row as soon as they are received minTemperature = Math.min[row.val, minTemperature]; }, err => { // This function will be invoked when all rows where consumed or an error was encountered } ];
Phương thức
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];4 hoạt động theo cách tương tự nhưng thay vì gọi lại, nó trả về một đối tượng Readable Streams2 trong
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];6 phát ra các thể hiện của
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];7
Nó có thể được dẫn xuôi dòng và cung cấp logic tạm dừng/tiếp tục tự động [nó lưu vào bộ đệm khi không đọc]
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];1
Loại do người dùng xác định
Các loại do người dùng xác định [UDT] được biểu diễn dưới dạng các đối tượng JavaScript
Ví dụ. Xem xét UDT sau và bảng
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];2
Bạn có thể truy xuất chi tiết địa chỉ người dùng dưới dạng đối tượng JavaScript thông thường
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];3
Đọc thêm thông tin về cách sử dụng UDT với Node. trình điều khiển js
phân trang
Tất cả các phương pháp trình điều khiển sử dụng một
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];8 mặc định trong số 5000 hàng, chỉ truy xuất trang kết quả đầu tiên lên đến tối đa 5000 hàng để bảo vệ ứng dụng khỏi việc vô tình truy xuất các tập kết quả lớn trong một phản hồi
Phương pháp
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];9 tự động tìm nạp trang sau khi trang hiện tại được đọc. Bạn cũng có thể sử dụng phương pháp
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];0 để truy xuất các trang sau bằng cách sử dụng cờ
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];1. Xem [tài liệu phân trang để biết thêm thông tin] [phân trang tài liệu]
Batch nhiều báo cáo
Bạn có thể thực thi nhiều câu lệnh trong một đợt để cập nhật/chèn nguyên bản một số hàng ngay cả trong các họ cột khác nhau
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];8
Trình ánh xạ đối tượng
Trình điều khiển cung cấp một trình ánh xạ đối tượng tích hợp cho phép bạn tương tác với dữ liệu của mình giống như bạn sẽ tương tác với một bộ tài liệu
Lấy các đối tượng từ cơ sở dữ liệu
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];9
Cập nhật một đối tượng từ cơ sở dữ liệu
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];0
Bạn có thể đọc thêm thông tin về cách bắt đầu với Mapper trong tài liệu của chúng tôi
Loại dữ liệu
Có một số loại dữ liệu được xác định trong đặc tả ECMAScript, điều này thường gây ra sự cố khi bạn đang cố gắng xử lý các loại dữ liệu đến từ các hệ thống khác trong JavaScript
Trình điều khiển hỗ trợ tất cả các kiểu dữ liệu CQL trong Apache Cassandra [3. 0 trở xuống] ngay cả đối với các loại không có biểu diễn JavaScript tích hợp sẵn, như thập phân, varint và bigint. Kiểm tra tài liệu về cách làm việc với các giá trị số, uuid và bộ sưu tập
ghi nhật ký
Các trường hợp của
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];2 là
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];3 và phát ra các sự kiện
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];4
const cassandra = require['cassandra-driver']; const client = new cassandra.Client[{ contactPoints: ['h1', 'h2'], localDataCenter: 'datacenter1', keyspace: 'ks1' }]; const query = 'SELECT name, email FROM users WHERE key = ?'; client.execute[query, [ 'someone' ]] .then[result => console.log['User with email %s', result.rows[0].email]];1
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];5 được truyền cho người nghe có thể là
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];6,
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];7,
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];8 hoặc
const client = new cassandra.Client[{ cloud: { secureConnectBundle: 'path/to/secure-connect-DATABASE_NAME.zip' }, credentials: { username: 'user_name', password: 'p@ssword1' } }];9. Truy cập tài liệu ghi nhật ký để biết thêm thông tin
khả năng tương thích
- Apache Cassandra phiên bản 2. 1 trở lên
- DataStax Enterprise phiên bản 4. 8 trở lên
- Nút. js phiên bản 8 trở lên
Ghi chú. Các sản phẩm DataStax không hỗ trợ các hệ thống big-endian
Tín dụng
Trình điều khiển này dựa trên tác phẩm gốc của Jorge Bay trên nút-cassandra-cql và thêm một loạt các tính năng nâng cao phổ biến trên tất cả các trình điều khiển DataStax khác cho Apache Cassandra
Nỗ lực phát triển để cung cấp một Node cập nhật, hiệu suất cao, đầy đủ tính năng. js cho Apache Cassandra sẽ tiếp tục trong dự án này, trong khi nút-cassandra-cql sẽ bị ngừng
Giấy phép
© DataStax, Inc
Được cấp phép theo Giấy phép Apache, Phiên bản 2. 0 ["Giấy phép"]; . Bạn có thể lấy một bản sao của Giấy phép tại
http. //www. apache. org/giấy phép/GIẤY PHÉP-2. 0
Trừ khi luật hiện hành yêu cầu hoặc được đồng ý bằng văn bản, phần mềm được phân phối theo Giấy phép sẽ được phân phối trên CƠ SỞ "NGUYÊN TRẠNG", KHÔNG CÓ BẢO ĐẢM HAY ĐIỀU KIỆN DƯỚI BẤT KỲ HÌNH THỨC NÀO, rõ ràng hay ngụ ý. Xem Giấy phép để biết các quyền và giới hạn quản lý ngôn ngữ cụ thể theo Giấy phép