Get in touch
or send us a question?
CONTACT

Amazon DynamoDB – Dịch vụ cơ sở dữ liệu NoSQL

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.

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.

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.

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..

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.