Amazon DynamoDB - Dịch vụ cơ sở dữ liệu NoSQL nhanh và linh hoạt cho mọi quy mô

Author: Lâm Văn Khánh

Amazon DynamoDB

Dịch vụ cơ sở dữ liệu NoSQL nhanh và linh hoạt cho mọi quy mô

 

Hiện nay, khi làm việc với Database chúng ta quá quen với những SQLServer, MySQL, PostgreSQL … Điểm chung của những database này là sử dụng ngôn ngữ SQL để truy vấn dữ liệu. Nhưng có một dạng Database với những sự phát triển rất mạnh mẽ cũng như rất nhiều quan tâm là NoSQL - một dạng Database linh hoạt và rất nhanh với mọi quy mô hệ thống. Để hỗ trợ khách hàng sử dụng dễ dàng một hệ thống NoSQL với những tính năng tuyệt vời, Amazon Web Service đã đưa ra dịch vụ Amazon DynamoDB vào năm 2012. Vậy DynamoDB có gì đặc biệt?

Giới thiệu

  • Amazon DynamoDB là cơ sở dữ liệu về khóa-giá trị và tài liệu, với hiệu năng hoạt động chỉ trong vài mili giây ở mọi quy mô. Đây là một cơ sở dữ liệu bền vững, đa hoạt tính, đa khu vực, được quản lý toàn phần, có tích hợp tính năng bảo mật, sao lưu, khôi phục và lưu vào bộ nhớ đệm cho các ứng dụng trên quy mô internet. DynamoDB có thể xử lý hơn 10 nghìn tỷ yêu cầu/ngày và hỗ trợ tối đa hơn 20 triệu yêu cầu/giây.

 

  • DynamoDB tự động phân tán dữ liệu và traffic của một bảng ra một số lượng server vừa đủ để có thể xử lý request capacity đặt ra bơi khách hàng và lượng dữ liệu lưu trữ, và đồng thời đảm bảo hiệu suất nhanh và đồng nhất. Tất cả dự liệu được lưu trữ trên SSD và tự động được sao chép ra các vùng sẵn sằng (Availability Zones) trong một khu vực (Region) để cung cấp độ sẵn sàng cao và độ bền của dữ liệu (high availablity and data durability).

 

  • Hàng trăm nghìn khách hàng AWS đã lựa chọn DynamoDB làm cơ sở dữ liệu về khóa-giá trị và tài liệu cho các ứng dụng di động, web, trò chơi, công nghệ quảng cáo, IoT và các ứng dụng khác cần quyền truy cập dữ liệu với độ trễ thấp ở mọi quy mô. Tạo một bảng dữ liệu mới, mở rộng hay thu hẹp request capacity mà không bị giảm hiệu suất, và có thể thấy được các thông số qua AWS Management Console - đó chính là sự tuyệt vời của DynamoDB

 

Thành phần cốt lõi

Bảng, Bản ghi và Thuộc tính

  • Bảng (Tables) – Tương tự như các hệ thống cơ sở dữ liệu khác, DynamoDB lưu trữ dữ liệu trong các bảng. Bảng là một tập hợp dữ liệu.
    Ví dụ: Một bảng có tên là “People”, bạn sử dụng bảng này để lưu trữ thông tin liên quan đến mối quan hệ cá nhân, gia đình hoặc bất kỳ dữ liệu cá nhân nào bạn muốn lưu trữ.

 

  • Bản ghi (Items) – Mỗi bảng chứa không hoặc nhiều bản ghi. Bản ghi là một nhóm các thuộc tính có thể nhận dạng duy nhất với các bản ghi khác. Trong bảng People, mỗi bản ghi đại diện cho một người.
    Cũng như vậy, đối với bảng “Cars” – mỗi mục đại diện cho một phương tiện. Các bản ghi trong DynamoDB tương tự như các hàng, bản ghi hoặc bộ dữ liệu trong các hệ thống cơ sở dữ liệu khác. Trong DynamoDB, không có giới hạn về số lượng bản ghi được lưu trữ trong một bảng.

 

  • Thuộc tính (Attributes) – Mỗi bản ghi gồm nhiều thuộc tính khác nhau. Thuộc tính là một phần tử dữ liêu cơ bản, không cần phải chia nhỏ hơn thêm nữa.
    Ví dụ: Trong bảng “People” các thuộc tính được gọi như: PersonID, LastName, First Name v.v…

 

Dưới đây là ví dụ bảng People bao gồm đầy đủ các Items và Attributes:

 

Chúng ta có thể thấy các điều sau của bảng People:
  • Mỗi items trong bảng đều có phần nhận dạng duy nhất hoặc khoá chính, nó giúp phân biệt items đó với các items khác trong bảng. Trong bảng People thì khoá chính bao gồm một thuộc tính là PersonID, PersonID chính là thuộc tính duy nhất để phân biệt các items khác nhau.
  • Ngoài khoá chính thì tất cả các thuộc tính và kiểu dữ liệu đều không cần phải xác định trước. Các bản ghi đều có thể có các thuộc tính riêng biệt của chính nó. Có thể thấy trong bảng People, ngoài khoá chính là PersonID thì các thuộc tính khác đều không xác định trước và mỗi items có thể có các thuộc tính khác nhau.
  • Mỗi thuộc tính chỉ có thể có một giá trị nhất định. Với yêu cầu thuộc tính trong thuộc tính, DynamoDB hỗ trợ tới 32 lần phân cấp độ lồng giá trị thuộc tính.

 

 


Hãy đến với một ví dụ khác để hiểu rõ hơn về các thành phân này. Ở đây chúng ta sẽ có thêm một bảng là bảng Music:

 

Có gì đặc biệt trong bảng này so với bảng People?
  • Đầu tiên chúng ta thấy rằng có tận 2 giá trị thuộc tính mang tính chất phân biệt các bản ghi trong bảng Music với nhau đó là Artist và SongTitle.
  • Tiếp theo có thể thấy các thuộc tính lồng với nhau như thuộc tính PromotionInfo. Trong DynamoDB có thể lồng vào với nhau tới 32 lần

 

 


Primary Key

Khi bạn tạo một bảng, ngoài tên bảng, bạn phải chỉ định khóa chính của bảng. Khóa chính xác định duy nhất từng bản ghi trong bảng, do đó không có hai bản ghi nào có thể có cùng một khóa.

DynamoDB hỗ trợ hai khoá chính như sau:

  • Partition key – Một khoá chính đơn giản, bao gồm một attribute được gọi là khoá phân vùng. DynamoDB sử dụng giá trị của khoá phân vùng làm đầu vào cho hàm băm bên trong. Đầu ra từ hàm băm xác định phân vùng mà bản ghi sẽ lưu trữ.
    Trong một bảng chỉ có một Partition key, không thể có 2 thuộc tính cùng là Partition key.
    Lấy ví dụ thuộc tính PersonID trong bảng People ở phần trước. Thuộc tính này là một Partition key đơn giản, chúng ta có thể truy cập mọi bản ghi của bằng People bằng cách gán giá trị PersonID cho bản ghi đó.
  • Partition key và sort key – Một loại khoá chính bao gồm cả hai thuộc tính là Partition key và sort key được gọi là Primary key.
    Như đã nói từ ý trước, DynamoDB sử dụng partition key để làm đầu vào cho hàm băm bên trong. Đầu ra từ hàm băm sẽ xác định phân vùng (bộ nhớ vật lý trong DynamoDB) mà mục sẽ lưu trữ. Tất cả mục có cùng giá trị partition key sẽ được xếp cùng nhau, theo thứ tự sắp xếp theo giá trị sort key.
    Trong một bảng có partition key và sort key, nó có thể có 2 bản ghi cùng giá trị partition key. Tuy nhiên 2 bản ghi đó phải có các giá trị sort key khác nhau.
    Ví dụ như bảng Music được nêu lên ở phần trước là một bảng có primary key (Artist và SongTitle). Người dùng có thể truy cập trực tiếp vào bất kỳ mục nào trong bảng Music nếu cung cấp giá trij cho Artist và SongTitle cho bản ghi đó
  • Primary key sẽ giúp chúng ta linh hoạt hơn trong việc truy vấn dữ liệu. Chúng ta sẽ thấy điều này bằng cách chỉ cung cấp cho Artíst trong bảng Music, DynamoDB sẽ xuất tất cả các bài hát của Artist đó. Để chỉ truy xuất một tập hợp các bài hát của một Artist cụ thể, chúng ta có thể cung cấp một giá trị cho Artist cùng với một loạt giá trị cho SongTitle.

 

Note: Partition key của một bản ghi còn được gọi là hash attribute (thuộc tính hàm băm). Thuật ngữ hast attribute được bắt nguồn từ việc sử dụng một hàm băm nội bộ trong DynamoDB để phân phối đồng đều các mục dữ liệu trên các phân vùng, dựa trên các giá trị partition key của chúng.
Sort key của một mục còn được gọi là range attribute (thuộc tính phạm vi). Range Attribute là thuật ngữ bắt nguồn từ các DynamoDB lưu trữ các bản ghi có cùng partition key gần nhau về mặt vật lý, theo thứ tự được sắp xếp theo giá trị sort key
Mỗi một thuộc tính primary key chỉ được chứa một giá trị duy nhất. Kiểu dữ liệu của primary key được cho phép là strings, number, hoặc là binary. Không bắt buộc yêu cầu này với các non-key attribute và đối tượng khác.

 

Mỗi một thuộc tính primary key chỉ được chứa một giá trị duy nhất. Kiểu dữ liệu của primary key được cho phép là strings, number, hoặc là binary. Không bắt buộc yêu cầu này với các non-key attribute và đối tượng khác.

Secondary Indexes

Bạn có thể tạo một hoặc nhiều secondary indexs trên một bảng. Một secondary index sẽ cho phép bạn truy vấn dữ liệu trong bảng bằng alternate key, ngoài các truy vấn với primary key. DynamoDB không yêu cầu chúng ta sử dụng các index, nhưng chúng giúp các ứng dụng của chúng ta linh hoạt hơn khi truy vấn dữ liệu. Sau khi tạo secondary index, chúng ta có tểh đọc dữ liệu từ index theo cách giống như làm từ một table.

DynamoDB hỗ trợ hai kiểu index:

  • Global secondary index – Một index với một partition key và sort key có thể khác các index gốc trong bảng
  • Local secondary index – Một index mà cso partition key trùng với index gốc và sort key là một arttribute khác.

Mỗi bảng trong DynamoDB có giới hạn là 20 global secondary index và 5 local secondary index cho mỗi bảng.

Trong ví dụ bảng Music, bạn có thể truy vấn dữ liệu bản ghi theo Artist (partition key) hoặc theo cả Artist và SongTitle (partition key và sort key). Bây giờ hãy đặt vấn đề chúng ta muốn truy vấn dữ liệu theo Genre và AlbumTitle, để giải quyết vấn đề này chúng ta có thể tạo một index trên Genre và Album Title, sau đso truy vấn chỉ mục theo cách giống như cách truy vấn bảng Music.

Sơ đồ sau sẽ cho thấy ví dụ về bảng Music,  với một index mới được gọi là GenreAlbumTitle. Trong index này, Genre là partition key và AlbumTitle là sort key.

Một số điều đáng chú ý về GenreAlbumTitle index:
  • Mọi index đều thuộc về một bảng, được gọi là bảng cơ sở cho index. Trong ví dụ trước, Music là bảng cơ sở cho chỉ mục GenreAlbumTitle.
  • DynamoDB duy trì các chỉ mục tự động. Khi bạn thêm, cập nhật hoặc xoá một bản ghi trong bảng cơ sở, DynamoDB sẽ thêm – cập nhật hoặc xoá mục tương ứng trong bất kỳ index nào thuộc bảng đó.
  • Khi chúng ta tạo một index, bạn chỉ định thuộc tính nào sẽ được sao chép hoặc chiếu từ bảng cơ sở vào index. Ở mức tối thiểu nhất, DynamoDB chiếu các thuộc tính tính từ bảng cơ sở vào index. Đây là trường hợp của GenreAlbumTitle, trong đó chỉ các thuộc tính từ bảng Music mới được chiếu vào index.
  • Bạn có thể truy vấn index GenreAlbumTitle để tìm tất cả các album của một thể loại cụ thể (ví dụ: tất cả các album nhạc Rock). Bạn cũng có tểh truy vấn index để tìm tất cả album trong một thể loại dụng cụ có tiêu đề nhất định (ví dụ: tất cả các album Country với tiêu đề bắt đầu bằng chữ H).


 

DynamoDB Stream

DynamoDB Streams là một tính năng tuỳ chọn ghi lại các sự kiện sửa đổi dữ liệu trong bảng DynamoDB. Dữ liệu về các sự kiện này xuất hiện trong luồng theo gần với thời gian thực và theo thứ tự các sự kiện đã xảy ra.

Mỗi sự kiện được đại diện bởi một bản ghi luồng. Nếu bạn bật luồng trên bảng, DynamoDB Streams sẽ ghi một bản ghi luồng bất cứ khi nào một trong các sự kiện sau xảy ra:

  • Một bản ghi mới được thêm vào bảng: Luồng chụp ảnh của toàn bộ bản ghi, bao gồm tất cả các thuộc tính của nó.
  • Một bản ghi được cập nhật: Luồng ghi lại hình ảnh “before” và “after” của bất kỳ thuộc tính nào đã được sửa đổi trong bản ghi.
  • Một bản ghi bị xoá khỏi bảng: Luồng chụp ảnh của toàn bộ mục trước khi bị xoá

Mỗi bản ghi luồng cũng chứa tên của bảng, sự kiện timestamp, và metadata khác. Bản ghi luồng có thời gian tồn tại là 24h, sau đó chúng sẽ tự động bị xoá khỏi luồng.

Chúng ta cũng có thể sử dụng DynamoDB Streams cùng với AWS Lambda để tạo trình kích hoạt – mã chạy tự động bất cứ khi nào một sự kiện quan tâm xuất hiện trong một luồng.

Ví dụ: hãy xem xét bảng Customers chứa thông tin khách hàng của một công ty. Giả sử rằng bạn muốn gửi một email “welcome” đến từng khách hàng mới. Bạn có thể bật một luồng trên bảng đó, sau đó liên kết luồng với một hàm Lambda. Hàm Lambda sẽ chạy bất cứ khi nào bản ghi luồng với xuất hiện, nhưng chỉ xử lý các mục mới được thêm vào bảng Customers. Đối với bất kỳ mục nào có thuộc tính EmailAddress, hàm Lambda sẽ gọi Amazon Simple Email Service (Amazon SES) để gửi đến địa chỉ email đó.
Chú ý: Trong ví dụ này,  khách hàng cuối cùng - Craig Roe, sẽ không nhận được email vì anh ta không có EmailAddress.

 


 

Ngoài các trình kích hoạt, DynamoDB Streams cho phép các giải pháp mạnh mẽ như sao chép dữ liệu trong và trên các AWS Regions, chế độ xem dữ liệu cụ thể hoá trong bảng DynamoDB, phân kích dữ liệu bằng chế độ xem cụ thể hoá Kinesis,v .v..

Lợi ích

Hiệu năng trên quy mô lớn

Không cần phải quản lý máy chủ

Phù hợp dùng trong doanh nghiệp

DynamoDB hỗ trợ một số ứng dụng có quy mô lớn nhất thế giới bằng cách luôn đáp ứng thời gian phản hồi chỉ trong vài mili giây ở mọi quy mô. Bạn có thể xây dựng các ứng dụng gần như không giới hạn về thông lượng và dung lượng lưu trữ. Các bảng toàn cầu của DynamoDB sao chép dữ liệu của bạn trên nhiều Khu vực AWS để cấp cho bạn quyền truy cập nhanh, cục bộ vào dữ liệu cho các ứng dụng được phân phối trên toàn cầu. Đối với các trường hợp sử dụng đòi khỏi khả năng truy cập nhanh hơn nữa với độ trễ micrô giây, DynamoDB Accelerator (DAX) cung cấp bộ nhớ đệm trong bộ nhớ được quản lý toàn phần.

DynamoDB là dịch vụ serverless khi bạn không cần phải cung cấp, vá hoặc quản lý máy chủ, cũng như không cần phải cài đặt, duy trì hoặc vận hành phần mềm. DynamoDB tự động thay đổi quy mô các bảng để điều chỉnh dung lượng và duy trì hiệu năng. Tích hợp dung sai cao và độ sẵn sàng hoạt động, nhờ đó ứng dụng của bạn không cần phải thiết kế các tính năng này. DynamoDB cung cấp cả chế độ dung lượng được cung cấp và chế độ dung lượng theo yêu cầu để bạn có thể tối ưu hóa chi phí bằng cách chỉ định công suất theo khối lượng công việc hoặc chỉ chi trả cho các tài nguyên mà bạn sử dụng.

DynamoDB hỗ trợ các giao tác ACID để bạn có thể xây dựng các ứng dụng quan trọng với doanh nghiệp trên quy mô lớn. DynamoDB mã hóa tất cả dữ liệu theo mặc định và cung cấp danh tính chi tiết cũng như quyền kiểm soát truy cập đối với mọi bảng của bạn. Bạn có thể tạo các bản sao lưu hoàn chỉnh của hàng trăm terabyte dữ liệu ngay tức thì mà không ảnh hưởng đến hiệu năng của bảng, đồng thời khôi phục kịp thời về điểm bất kỳ ở 35 ngày trước mà không có thời gian ngừng hoạt động. Bạn cũng có thể xuất dữ liệu bảng DynamoDB sang hồ dữ liệu trong Amazon S3 để thực hiện phân tích ở mọi quy mô. DynamoDB cũng được thỏa thuận mức dịch vụ hỗ trợ để đảm bảo khả năng hoạt động.

Ứng dụng

Ứng dụng web serverless

Backend di động

Vi dịch vụ

Phát triển các ứng dụng web mạnh mẽ mà có thể tự động tăng và giảm quy mô. Bạn sẽ không cần phải duy trì những máy chủ và các ứng dụng của bạn sẽ tự động có độ khả dụng cao.

Sử dụng DynamoDB và AWS AppSync để xây dựng các ứng dụng web và di động tương tác bằng các bản cập nhật theo thời gian thực, truy cập dữ liệu ngoại tuyến và đồng bộ hóa dữ liệu với tính năng xử lý xung đột tích hợp.

Xây dựng các vi dịch vụ linh hoạt và có thể tái sử dụng nhờ dùng DynamoDB như một kho dữ liệu serverless để đạt hiệu năng nhanh và ổn định.




Kết luận

 

DynamoDB có cấu trúc bao gồm các bảng giống như với DB thông thường, tuy nhiên bảng không được sắp xếp theo các cột và dòng mà là tập hợp các bản ghi, mỗi bản ghi lại là tập hợp của các thuộc tính. Mỗi bản ghi được định danh duy nhất bởi một giá trị của khóa chính (primary key).

Mỗi table có một khóa chính duy nhất có thể là khóa đơn, hoặc khóa kép (composite key). Khóa đơn chỉ là một giá trị phân vùng (partition key, còn gọi là giá trị băm – hash key), còn khóa kép bao gồm một giá trị phân vùng và một giá trị sắp xếp (sort key, hay giá trị khoảng – range key).

Nếu bạn là một nhà quản lý dữ liệu, bạn có thể tạo một bảng dữ liệu mới, mở rộng hay thu hẹp request capacity mà không bị giảm hiệu suất, và có thể thây được các thông số qua AWS Management Console. Với DynamoDB, bạn có thể phó thác gánh nặng quản lý và mở rộng dữ liệu cho AWS và không phải lo lắng về việc cung cấp hardware, thiết lập và cài đặt, sao chép dữ liệu.

Hàng trăm nghìn khách hàng AWS đã lựa chọn DynamoDB làm cơ sở dữ liệu về khóa-giá trị và tài liệu cho các ứng dụng di động, web, trò chơi, công nghệ quảng cáo, IoT và các ứng dụng khác cần quyền truy cập dữ liệu với độ trễ thấp ở mọi quy mô. Tạo một bảng mới cho ứng dụng của bạn và để DynamoDB đảm nhiệm phần còn lại.

 

Category : Database
Các tin khác
CMC TELECOM & AWS
CMC TELECOM VÀ AWS HỖ TRỢ NGÀNH SẢN XUẤT ỨNG DỤNG ĐIỆN TOÁN ĐÁM MÂY TRONG CHUYỂN ĐỔI SỐ
CMC TELECOM VÀ AWS HỖ TRỢ NGÀNH SẢN XUẤT ỨNG DỤNG ĐIỆN TOÁN ĐÁM MÂY TRONG CHUYỂN ĐỔI SỐ

CMC Telecom là đối tác chiến lược và là một trong những nhà cung cấp giải pháp AWS hàng đầu tại thị trường Việt Nam. Với lợi thế về chủ động đường truyền kết nối toàn cầu và Data Center tiêu chuẩn quốc tế, CMC Telecom hợp tác với AWS đưa đến cho khách hàng các dịch vụ chuyển đổi số chuyên nghiệp, tin cậy và bảo mật cao cấp. Đội ngũ nhân sự CMC Telecom sở hữu chứng chỉ kỹ thuật, giải pháp từ AWS đảm bảo chuyên môn cao tập trung vào các ngành nghiệp vụ như khối Tài chính Ngân hàng Bảo hiểm; Khối dịch vụ Công nghệ Thông tin, Khối Sản xuất, Bán lẻ,Thương mại Điện tử, Logistic và các khối Chính phủ, Giáo dục, Y tế

Khám phá ngay
Elastic Load Balancing
Elastic Load Balancing

Cân bằng tài đàn hồi (Elastic Load Balancing) tự động phân phối lưu lượng truy cập của bạn đến nhiều đích khác nhau, chẳng hạn như máy ảo EC2, containers và địa chỉ IP, trong một hoặc nhiều Zone của AWS. Cân bằng tải đàn hồi giám sát tình trạng của các điểm đích đã đăng ký và chỉ định tuyến lưu lượng đến các điểm đích lành mạnh. Cân bằng tải đàn hồi sẽ cân bằng tải của bạn khi lưu lượng truy cập đến của bạn thay đổi theo thời gian. Nó có thể tự động mở rộng đến phần lớn khối lượng công việc.

Khám phá ngay
Amazon DynamoDB - Dịch vụ cơ sở dữ liệu NoSQL nhanh và linh hoạt cho mọi quy mô
Amazon DynamoDB - Dịch vụ cơ sở dữ liệu NoSQL nhanh và linh hoạt cho mọi quy mô

Hiện nay, khi làm việc với Database chúng ta quá quen với những SQLServer, MySQL, PostgreSQL … Điểm chung của những database này là sử dụng ngôn ngữ SQL để truy vấn dữ liệu. Nhưng có một dạng Database với những sự phát triển rất mạnh mẽ cũng như rất nhiều quan tâm là NoSQL - một dạng Database linh hoạt và rất nhanh với mọi quy mô hệ thống. Để hỗ trợ khách hàng sử dụng dễ dàng một hệ thống NoSQL với những tính năng tuyệt vời, Amazon Web Service đã đưa ra dịch vụ Amazon DynamoDB vào năm 2012. Vậy DynamoDB có gì đặc biệt?

Khám phá ngay