solidDB và những bí mật của tốc độ

Cơ sở dữ liệu trong bộ nhớ của IBM định nghĩa lại thế nào là hiệu năng cao

Tìm hiểu những bí mật kỹ thuật bên trong sản phẩm solidDB của IBM

Antoni Wolski, Trưởng nhóm nghiên cứu họ sản phẩm SolidDB, IBM

Antoni Wolski là trưởng nhóm nghiên cứu sản phẩm solidDB. Với hơn 20 năm hoạt động trong công nghệ cơ sở dữ liệu, ông đã góp phần vào các giải pháp, sản phẩm, nghiên cứu, bằng sáng chế và các bài viết trong lĩnh vực này.



30 12 2011

Hãy đọc bài viết này qua ấn bản kỹ thuật số tương tác của chúng tôi!

Là cơ sở dữ liệu quan hệ trong bộ nhớ, solidDB của IBM được sử dụng trên toàn thế giới vì nó có khả năng cung cấp tốc độ và khả năng sẵn sàng vô cùng cao. Đúng như tên gọi hàm ý, một cơ sở dữ liệu trong bộ nhớ nằm hoàn toàn trong bộ nhớ chính chứ không phải trên ổ đĩa, làm cho việc truy cập dữ liệu trở nên nhanh hơn một bậc so với cơ sở dữ liệu thông thường trên ổ đĩa. Một phần của bước nhảy vọt đó là do thực tế rằng RAM cung cấp truy cập dữ liệu nhanh hơn so với các ổ đĩa cứng.

Nhưng solidDB cũng có cấu trúc dữ liệu và phương pháp truy cập được thiết kế đặc biệt để lưu trữ, tìm kiếm, và xử lý dữ liệu trong bộ nhớ chính. Kết quả là, nó xử lý tốt hơn các cơ sở dữ liệu dựa trên ổ đĩa bình thường ngay cả khi các cơ sở dữ liệu này có dữ liệu được lưu trữ sẵn hoàn toàn trong bộ nhớ. Một số cơ sở dữ liệu có độ trễ thấp, nhưng không thể xử lý một số lượng lớn các giao dịch hoặc các phiên đồng thời. solidDB của IBM cung cấp thông lượng được đo trong phạm vi hàng chục đến hàng trăm hàng ngàn giao dịch mỗi giây, trong khi liên tục đạt được thời gian đáp ứng (hay độ trễ) được đo bằng micro giây. Bài viết này khám phá sự khác biệt về cấu trúc giữa các cơ sở dữ liệu trong bộ nhớ và dựa trên ổ đĩa, và cách solidDB hoạt động như thế nào để cung cấp tốc độ cực cao.

Đôi dòng về lịch sử của hệ quản trị cơ sở dữ liệu quan hệ (RDBMS)

Khi các hệ thống quản lý dữ liệu đầu tiên xuất hiện vào những năm 1960, thì ổ đĩa là nơi duy nhất để lưu trữ và truy cập một lượng lớn dữ liệu trong một khoảng thời gian hợp lý. Các nhà thiết kế RDBMS tập trung vào việc tối ưu hóa vào/ra và cố gắng để dóng các mẫu truy cập dữ liệu theo cấu trúc khối mà các ổ đĩa áp đặt. Chiến lược thiết kế thường tập trung vào bộ nhớ đệm chia sẻ chung, nơi các khối dữ liệu được lưu giữ để tái sử dụng, trong khi các tiến bộ về phương thức truy cập tạo ra các giải pháp, chẳng hạn như giải pháp cây B+ nổi tiếng, là chỉ mục được tối ưu hóa theo khối.

Trong khi đó, các chiến thuật tối ưu hóa truy vấn tập trung vào giảm thiểu việc tìm nạp trang bất cứ nơi nào có thể. Trong trận chiến khốc liệt vì hiệu năng, hoạt động vào/ra đĩa thường là kẻ thù nguy hiểm nhất, và hiệu quả xử lý phải hy sinh để tránh truy cập ổ đĩa. Ví dụ: Với kích thước trang điển hình là 8 KB hoặc 16 KB, việc xử lý trong trang vốn có tính tuần tự và kém hiệu quả về CPU so với truy cập dữ liệu ngẫu nhiên. Tuy nhiên, nó vẫn còn là một cách phổ biến để giảm truy cập ổ đĩa.

Khi kỷ nguyên bộ nhớ kích thước lớn xuất hiện, nhiều nhà quản trị cơ sở dữ liệu tăng vùng nhớ đệm của mình cho đến khi chúng đủ lớn để chứa toàn bộ cơ sở dữ liệu, do đó tạo ra khái niệm cơ sở dữ liệu được lưu trữ sẵn hoàn toàn trong bộ nhớ. Nhưng trong vùng đệm RAM, các hệ thống quản lý cơ sở dữ liệu vẫn còn là con tin của mọi sự kém hiệu quả có tính cấu trúc của chiến lược vào/ra định hướng theo khối, được tạo ra để làm việc với các ổ đĩa cứng.


Di chuyển qua các khối

Một trong những sự khác biệt đáng chú ý nhất của hệ thống cơ sở dữ liệu trong bộ nhớ là sự vắng mặt các cấu trúc khối dữ liệu lớn. solidDB của IBM đã loại bỏ nó. Các hàng bảng và các nút chỉ mục được lưu trữ độc lập trong bộ nhớ, do đó có thể thêm dữ liệu vào mà không cần phải tổ chức lại cấu trúc khối lớn. Cơ sở dữ liệu trong bộ nhớ cũng loại bỏ việc sử dụng các chỉ mục dạng khối lớn, đôi khi được gọi là rừng cây rậm rạp, mà nghiêng về các cấu trúc mảnh mai, ở đây số mức chỉ mục được tăng lên và kích thước nút chỉ mục được giữ ở mức tối thiểu để tránh việc xử lý nội tại nút (in-node) rất tốn kém. Chiến lược chỉ mục cơ sở dữ liệu trong bộ nhớ phổ biến nhất được gọi là cây T. Thay vào đó, solidDB của IBM sử dụng chỉ mục gọi là trie (hoặc cây tiền tố), ban đầu được tạo ra để tìm kiếm văn bản, nhưng hóa ra nó rất hoàn hảo cho việc lập chỉ mục trong bộ nhớ. Một trie (tên gọi xuất phát từ từ retrival – truy lục) được tạo thành từ một loạt các nút, ở đây các nút con của một nút cho trước có cùng chung một tiền tố là chuỗi ký tự kết hợp với nút đó. Ví dụ: Nếu từ "dog" – con chó đã được lưu trữ trong một trie như một nút, nó sẽ đi xuống từ nút có chứa từ "do", nút này sẽ đi xuống từ nút có chứa từ "d."

Các chỉ mục trie tăng hiệu năng bằng cách giảm sự cần thiết phải so sánh giá trị khóa và loại bỏ trên thực tế việc xử lý nội tại một nút. Chỉ mục này có chứa một nút là một mảng nhỏ các con trỏ đến mức thấp hơn. Thay vì sử dụng toàn bộ giá trị khóa để đi qua cây bằng cách so sánh, giá trị khóa được cắt thành nhiều phần nhỏ kích thước một vài bit. Mỗi phần là một chỉ mục trực tiếp cho mảng con trỏ của mức tương ứng: phần đầu tiên bên trái dành cho các nút thuộc mức thứ nhất, phần thứ hai dành cho các nút của mức thứ hai, v.v.. Vì vậy, việc tìm kiếm toàn bộ có thể được thực hiện chỉ với một vài truy lục phần tử mảng. Ngoài ra, mỗi nút chỉ mục là một khối dữ liệu nhỏ (khoảng 256 byte trong solidDB), rất có lợi bởi vì các khối phù hợp một cách chính xác với bộ nhớ nhanh (cache) của các vi xử lý hiện đại, tăng hiệu quả xử lý bằng cách thúc đẩy việc sử dụng bộ nhớ nhanh hiệu quả. Mảng dữ liệu nhỏ như vậy là cấu trúc dữ liệu hiệu quả nhất trong các bộ xử lý hiện đại, và solidDB sử dụng chúng thường xuyên để tối đa hóa hiệu năng.


Điểm đánh dấu (checkpoint) và độ bền: Con đường dẫn đến tốc độ

solidDB của IBM sử dụng một số kỹ thuật bổ sung để tăng tốc độ xử lý cơ sở dữ liệu, bắt đầu với một phương pháp đã được cấp bằng sáng chế là tạo điểm đánh dấu, sinh ra điểm đánh dấu là một ảnh chụp nhanh nhất quán mà không ngăn trở việc xử lý giao dịch bình thường. Một điểm đánh dấu ảnh chụp nhanh nhất quán cho phép cơ sở dữ liệu chỉ khởi động lại kể từ điểm đánh dấu đó. Các sản phẩm cơ sở dữ liệu khác thường không cho phép làm việc này. Chúng phải sử dụng các tệp tin ghi nhật ký các giao dịch để tính toán lại trạng thái nhất quán (solidDB cho phép tắt hoạt động ghi nhật ký giao dịch nếu muốn). Giải pháp của solidDB có thể thực hiện được nhờ khả năng cấp phát vùng nhớ cho các ảnh của hàng và các ảnh bóng râm (shadow) của hàng (các phiên bản khác của cùng một hàng) mà không sử dụng các cấu trúc khối kém hiệu quả. Chỉ có những ảnh tương ứng với ảnh chụp nhanh nhất quán mới được ghi vào tệp điểm đánh dấu, và các bóng râm của hàng cho phép các giao dịch hiện đang thi hành chạy không bị hạn chế gì trong quá trình tạo điểm đánh dấu.

Hình 1: solidDB của IBM có thể được triển khai như là cơ sở dữ liệu của bản ghi (bên trái) hoặc như là cache của cơ sở dữ liệu tốc độ cao (bên phải)

Hơn nữa, trình tối ưu hóa truy vấn của solidDB ghi nhận bản chất khác của các bảng trong bộ nhớ bằng cách ước tính chi phí chạy thi hành theo cách mới. Tối ưu hóa truy vấn tập trung vào tuyến thi hành giới hạn trong CPU (CPUbound), trong khi cơ sở dữ liệu lưu trữ hoàn toàn trong bộ nhớ nhanh sẽ vẫn lo lắng với việc tối ưu hóa tìm nạp các trang cho bộ lưu trữ thứ cấp, mà bây giờ không còn là vấn đề nữa.

Một kỹ thuật khác mà solidDB của IBM sử dụng là nới lỏng độ vững bền của giao dịch. Trong quá khứ, các cơ sở dữ liệu đã luôn hỗ trợ một độ vững bền hoàn toàn, đảm bảo rằng các dữ liệu được ghi lâu bền ngay khi giao dịch được giao kết. Vấn đề là để có độ vững bền hoàn toàn thì phải thực hiện việc ghi nhật ký đồng bộ, và do đó nó tiêu thụ tài nguyên và làm giảm thời gian đáp ứng. Trong nhiều trường hợp, chấp nhận độ vững bền thấp hơn cho một số công việc để đổi lấy thời gian phản ứng nhanh hơn là một sự đánh đổi hoàn toàn chấp nhận được. Với solidDB, độ vững bền giao dịch có thể được nới lỏng tại thời gian chạy cho một phiên giao dịch cơ sở dữ liệu đã cho hoặc thậm chí chỉ với một giao dịch duy nhất.

IBM solidDB cũng làm tăng hiệu năng của cơ sở dữ liệu bằng cách giúp các nhà phát triển tránh các chuyển bối cảnh trong quá trình tương tác khách/chủ. Bằng cách sử dụng trình điều khiển truy cập cơ sở dữ liệu được cung cấp với solidDB có chứa mã thực hiện truy vấn đầy đủ, một nhà phát triển có thể liên kết có hiệu quả các ứng dụng với mã của hệ thống quản trị cơ sở dữ liệu và sử dụng bộ nhớ chia sẻ để chia sẻ dữ liệu giữa các ứng dụng.

Khi tất cả các biện pháp này được áp dụng và tải ứng dụng thuộc kiểu phải chịu những hoạt động vào/ra đáng kể trong một cơ sở dữ liệu truyền thống, thì bằng cách sử dụng solidDB thông lượng có thể được tăng lên hẳn một mức mới. Hơn nữa, thậm chí việc cải thiện thời gian đáp ứng còn ấn tượng hơn: độ trễ đối với các giao dịch truy vấn thường là từ 10 đến 20 micro giây và độ trễ đối với các giao dịch cập nhật thường ít hơn 100 micro giây. Trong cơ sở dữ liệu trên ổ đĩa truyền thống, thời gian tương ứng thường được đo bằng mili giây.


Tốc độ và sức mạnh của solidDB

Ngoài những lợi thế về hiệu năng, solidDB cũng cung cấp một số lợi ích bổ sung. Nó kết hợp cơ sở dữ liệu trong bộ nhớ giao dịch đầy đủ với cơ sở dữ liệu trên ổ đĩa mạnh mẽ thành một giải pháp nhỏ gọn, với khả năng lưu trữ một phần của cùng một cơ sở dữ liệu trong bộ nhớ và một phần khác trên ổ đĩa một cách trong suốt với người dùng. Và solidDB của IBM là sản phẩm duy nhất trên thị trường có thể được triển khai như một cache tốc độ cao ở mặt trước hầu hết bất kỳ cơ sở dữ liệu quan hệ trên ổ đĩa nào khác (xem hình 1). Cuối cùng, solidDB cung cấp khả năng sẵn sàng vô cùng cao, vượt quá mức phần trăm điển hình với năm số chín, đến mức sáu số chín (99,9999%) thời gian hoạt động. Nói cách khác, nếu bạn đang tìm kiếm tốc độ cực cao, bạn sẽ tìm thấy nó, nhưng đó chỉ là sự khởi đầu đối với solidDB của IBM.

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management
ArticleID=783272
ArticleTitle=solidDB và những bí mật của tốc độ
publish-date=12302011