HBase
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> HBase

Đưa hỗ trợ giao dịch vào Cơ sở dữ liệu hoạt động của Cloudera

Chúng tôi vui mừng chia sẻ rằng sau khi thêm ANSI SQL, chỉ số phụ, giản đồ hình sao và khả năng xem vào Cơ sở dữ liệu hoạt động của Cloudera, chúng tôi sẽ giới thiệu hỗ trợ giao dịch phân tán trong những tháng tới.

ACID là gì?

Mô hình ACID của thiết kế cơ sở dữ liệu là một trong những khái niệm quan trọng nhất trong cơ sở dữ liệu. ACID là viết tắt của tính nguyên tử, tính nhất quán, tính cô lập và độ bền. Trong một thời gian rất dài, việc tuân thủ nghiêm ngặt bốn thuộc tính này đã được yêu cầu để có một cơ sở dữ liệu thành công về mặt thương mại. Tuy nhiên, mô hình này đã tạo ra các vấn đề khi mở rộng ra ngoài cơ sở dữ liệu một máy chủ. Để giải quyết hạn chế này, khách hàng đã mở rộng quy mô phần cứng mà cơ sở dữ liệu được triển khai.

Cơ sở dữ liệu NoSQL đã nới lỏng một hoặc nhiều trong số 4 thuộc tính này để đạt được những cải tiến đáng kể về khả năng mở rộng - Cơ sở dữ liệu hoạt động Cloudera (Được cung cấp bởi Apache HBase) là một trong những cơ sở dữ liệu như vậy. Chúng tôi đã đánh đổi tính nguyên tử - cụ thể là Cloudera cung cấp tính nguyên tử một hàng. Để bù lại, chúng tôi đã hỗ trợ các bảng rất rộng (có thể có hàng triệu cột). Điều này cho phép khách hàng chuẩn hóa giản đồ sao của họ và biểu diễn chúng dưới dạng các hàng đơn lẻ để thực hiện các cam kết nguyên tử trong một hàng duy nhất của những gì từng được biểu thị dưới dạng nhiều bảng.

Kể từ khi HBase ra đời, chúng tôi đã nỗ lực hướng tới việc xây dựng các khả năng thu hẹp khoảng cách về tính năng với các RDBM truyền thống trong khi vẫn duy trì các lợi ích của khả năng mở rộng NoSQL, tính nhất quán, độ bền và sự cô lập.

Đầu năm nay, chúng tôi đã cung cấp hỗ trợ cho ANSI SQL, các chỉ số phụ, giản đồ sao và các chế độ xem trên Apache HBase, mang lại giao diện và các khả năng quen thuộc với tất cả các nhà phát triển ứng dụng đã từng xây dựng ứng dụng sử dụng MySQL hoặc PostGres.

Giờ đây, chúng tôi đang trên đỉnh cao của việc cung cấp khả năng thực hiện các cam kết nguyên tử đối với dữ liệu vượt qua các hàng và bảng trên toàn bộ cụm.

Giao dịch nguyên tử là gì?

Một giao dịch bao gồm một tập hợp các hoạt động trong cơ sở dữ liệu được quản lý nguyên tử, vì vậy tất cả các hoạt động phải được hoàn thành hoàn toàn (đã cam kết) hoặc không có hiệu lực (bị hủy bỏ).

Hiện tại, chúng tôi chỉ hỗ trợ các giao dịch nguyên tử một hàng. Điều này có nghĩa là khi các nhà phát triển muốn áp dụng Cơ sở dữ liệu hoạt động của Cloudera, họ cần phải suy nghĩ khác về lược đồ của mình.

Hiện chúng tôi đang giới thiệu khả năng có các giao dịch phức tạp trải dài nhiều hàng và bảng, có nghĩa là các nhà phát triển có thể triển khai giản đồ hình sao truyền thống hoặc tận dụng các cột rộng hoặc cả hai tùy thuộc vào nhu cầu của họ. Tính linh hoạt này kết hợp với phương pháp tiếp cận lược đồ tiến hóa của Cơ sở dữ liệu hoạt động của Cloudera cho phép các nhà phát triển tận dụng cơ sở dữ liệu quy mô hiện đại trong khi vẫn tiếp tục nâng cao bộ kỹ năng hiện có của họ.

Một điều quan trọng cần lưu ý là hỗ trợ giao dịch trong Cơ sở dữ liệu hoạt động của Cloudera là "không có khóa" và cung cấp các đảm bảo cách ly ảnh chụp nhanh. Cơ sở dữ liệu truyền thống triển khai "khóa" đối với tất cả dữ liệu được liên kết với một giao dịch để các khách hàng khác truy cập vào dữ liệu không thay đổi dữ liệu đó trước khi nó được cam kết với cơ sở dữ liệu. Tuy nhiên, điều này có thể dẫn đến các điều kiện chủng tộc sẽ kết thúc với sự phụ thuộc vòng tròn và treo. Khóa cũng là nguyên nhân gây ra hiệu suất kém đáng kể trên một phần của ứng dụng vì các ứng dụng chờ nhau để chúng có thể khóa và tiếp tục.

Cách tiếp cận của chúng tôi cho phép giao dịch đầu tiên hoàn thành được tiếp tục và những giao dịch khác đang cố gắng thực hiện thay đổi đối với cùng một tập dữ liệu sẽ phải thử lại. Điều này ngăn chặn mọi sự làm chậm toàn bộ hệ sinh thái của các ứng dụng đang chạy đồng thời trên cơ sở dữ liệu. Nói cách khác, cách tiếp cận của chúng tôi cho phép khả năng mở rộng tuyến tính đồng thời cung cấp tính nguyên tử mà cơ sở dữ liệu giao dịch truyền thống có thể cung cấp.

Kết quả hoạt động sơ bộ

Khả năng hỗ trợ giao dịch của chúng tôi hiện đang ở giai đoạn thử nghiệm và đang được thử nghiệm hiệu suất rộng rãi.

Thử nghiệm hiện tại bao gồm điểm chuẩn TPC-C tiêu chuẩn ngành bằng ứng dụng OLTP Bench. Điểm chuẩn TPC-C mô phỏng một số giao dịch mua được thực hiện đồng thời trên một số kho hàng. Lược đồ được sử dụng trong TPC-C được biểu diễn trong biểu đồ mối quan hệ-thực thể sau:

Các số trong các khối thực thể đại diện cho số lượng bảng (số hàng). Những con số này được tính theo W, số lượng Kho, để minh họa cho việc mở rộng cơ sở dữ liệu. Các số bên cạnh mũi tên mối quan hệ đại diện cho số lượng của các mối quan hệ (số lượng con trung bình của mỗi phụ huynh). + ký hiệu đại diện cho số lượng biến thiên nhỏ của tập hợp cơ sở dữ liệu.

Một vị trí đặt hàng yêu cầu 10 truy vấn sau để được chạy như một giao dịch nguyên tử duy nhất:

 1.SELECT c_discount, c_last, C_creditFROM khách hàngWHERE c_w_id =? VÀ c_d_id =? VÀ c_id =? 2. CHỌN w_taxFROM khoWHERE w_id =? 3. CHỌN d_next_o_id, quận D_taxFROMWHERE d_w_id =? VÀ d_id =? 4. UPSERT INTO quận (d_next_o_id, d_w_id, d_id) CHỌN d_next_o_id + 1, d_w_id, quận D_idFROMWHERE d_w_id =? VÀ d_id =? 5. UPSERT INTO new_order (no_o_id, no_d_id, no_w_id) VALUES (?,?,?) 6. UPSERT INTO đơn đặt hàng (o_id, o_d_id, o_w_id, o_c_id, o_entry_d, o_ol_cnt, o_all_local) GIÁ TRỊ (?,?,?,?,?,?,?) Lặp lại các truy vấn sau cho từng mặt hàng đã chọn để đặt hàng. 7. CHỌN i_price, i_name, i_data FROM item WHERE i_id =? 8. CHỌN s_quantity, s_data, s_dist_01, s_dist_02, s_dist_03, s_dist_04, s_dist_05, s_dist_06, s_dist_07, s_dist_08, s_dist_09, s_dist_10 FROM stock WHERE s_i_id =? VÀ s_w_id =? 9. UPSERT INTO stock (s_quantity, s_ytd, s_order_cnt, s_remote_cnt, s_i_id, s_w_id) SELECT ?, s_ytd + ?, s_order_cnt + 1, s_remote_cnt + ?, s_i_id, s_w_idFROM stockWHERE s_i? VÀ s_w_id =? 10. CHÈN VÀO order_line (ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info) GIÁ TRỊ (?,?,?,?,?,?,?,? 

Một giao dịch thanh toán yêu cầu 6 truy vấn sau để được chạy như một giao dịch nguyên tử duy nhất:

 1. UPSERT INTO kho (w_ytd, w_id) CHỌN w_ytd + ?, w_id TỪ kho WHERE w_id =? 2. CHỌN w_street_1, w_street_2, w_city, w_state, w_zip, w_nameFROM khoWHERE w_id =? 3. UPSERT INTO quận (d_ytd, d_w_id, d_id) CHỌN d_ytd + ?, d_w_id, d_id TỪ quận WHERE d_w_id =? VÀ d_id =? 4. CHỌN d_street_1, d_street_2, d_city, d_state, d_zip, d_name FROM District WHERE d_w_id =? VÀ d_id =? 6. UPSERT INTO khách hàng (c_balance, c_ytd_payment, c_payment_cnt, c_w_id, c_d_id, c_id) CHỌN ?,?,?, C_w_id, c_d_id, c_idFROM customerWHERE c_w_id =? VÀ c_d_id =? VÀ c_id =? 7. CHÈN VÀO lịch sử (h_c_d_id, h_c_w_id, h_c_id, h_d_id, h_w_id, h_date, h_amount, h_data) GIÁ TRỊ (?,?,?,?,?,?,?,?) 

Với 3 máy chủ khu vực chạy trên các nút Dell PowerEdge R440, chúng tôi có thể đạt được các kết quả sau:

Trong biểu đồ này, trục Y thể hiện số lượng đơn đặt hàng có thể được xử lý hoàn toàn (bao gồm tạo đơn hàng mới, thanh toán, giao hàng, v.v.) mỗi phút và được biểu thị bằng điểm chuẩn tpm-C. Trục X đại diện cho số lượng thực thể thực hiện các giao dịch song song.

Các kết quả sơ bộ này chỉ ra rằng hệ thống đạt đến thông lượng giao dịch cao nhất trong khoảng từ 150 đến 300 giao dịch viên và cần phải kiểm tra thêm để xác định mức cao nhất đó.

Khi khả năng này trưởng thành, cả thông lượng OpDB và khả năng đo lường thông lượng của chúng tôi sẽ được cải thiện.

Kết luận

Hầu hết các ứng dụng đòn bẩy giao dịch để hỗ trợ vô số nhu cầu mà doanh nghiệp phải đối mặt. Tuy nhiên, khi các RDBMS truyền thống không thể mở rộng quy mô, khách hàng buộc phải chia nhỏ cơ sở dữ liệu theo cách thủ công và tự quản lý từng cơ sở dữ liệu được chia nhỏ như một cơ sở dữ liệu độc lập.

Khi điều này trở nên quá cồng kềnh để quản lý, khách hàng nên cân nhắc chuyển ứng dụng đó sang Cơ sở dữ liệu hoạt động của Cloudera. Hỗ trợ giao dịch phức tạp kết hợp với hỗ trợ ANSI SQL và bản chất mở rộng quy mô của Apache HBase cung cấp một sự kết hợp có thể làm giảm đáng kể sự phức tạp trong hoạt động quản lý tăng trưởng.

Nếu bạn cảm thấy mệt mỏi với việc quản lý cơ sở dữ liệu bị phân đoạn và tìm cách giảm TCO của cơ sở dữ liệu, hãy liên hệ với nhóm tài khoản Cloudera của bạn để xem chúng tôi có thể trợ giúp như thế nào.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apache Phoenix dành cho CDH

  2. Cách triển khai mô hình ML vào sản xuất

  3. Công việc của Map Only trong Hadoop là gì?

  4. Bảng mẫu HBase

  5. Giới thiệu về Vị trí dữ liệu trong Hadoop MapReduce