Mục lục:
- Caching dữ liệu trong bộ nhớ
- Sao chép dữ liệu đến các nô lệ
- Mô hình hóa dữ liệu trong các cửa hàng có giá trị khóa
- Hoạt động trên dữ liệu
- Đánh giá Redis
Video: [SMAC 2015] NEO4J 2025
Các kho khóa giá trị trong NoSQL đều là về tốc độ. Bạn có thể sử dụng các kỹ thuật khác nhau để tối đa hóa tốc độ đó, từ dữ liệu bộ nhớ đệm, đến việc có nhiều bản sao của dữ liệu hoặc sử dụng các cấu trúc lưu trữ thích hợp nhất.
Caching dữ liệu trong bộ nhớ
Vì dữ liệu có thể được truy cập dễ dàng khi nó được lưu trữ trong bộ nhớ truy cập ngẫu nhiên (RAM), việc chọn lưu trữ giá trị khóa để lưu trữ dữ liệu trong RAM có thể tăng tốc độ truy cập dữ liệu của bạn, chi phí máy chủ cao hơn.
Thông thường, mặc dù, sự cân bằng này là đáng làm. Bạn có thể dễ dàng tính toán phần trăm dữ liệu được lưu trữ của bạn được yêu cầu thường xuyên. Nếu bạn biết năm phần trăm thường được yêu cầu mỗi vài phút, sau đó lấy 5 phần trăm kích thước dữ liệu của bạn và thêm số đó làm khoảng trống RAM bổ sung trên các máy chủ cơ sở dữ liệu của bạn.
Hãy nhớ rằng hệ điều hành, các ứng dụng khác và máy chủ cơ sở dữ liệu cũng có yêu cầu về bộ nhớ.
Sao chép dữ liệu đến các nô lệ
Trong các kho khóa giá trị quan trọng, chìa khóa cụ thể được lưu trữ trên một trong các máy chủ trong cụm. Quá trình này được gọi là phân vùng chính . Điều này có nghĩa là nếu khoá này được liên tục yêu cầu, nút này sẽ nhận được phần lớn các yêu cầu. Do đó, nút này sẽ chậm hơn tốc độ yêu cầu trung bình của bạn, có thể ảnh hưởng đến chất lượng dịch vụ cho người dùng của bạn.
Để tránh trường hợp này, một số cửa hàng có giá trị khóa hỗ trợ thêm các bản sao chỉ đọc, còn được gọi là nô lệ. Redis, Riak, và Aerospike là những ví dụ điển hình. Nhân rộng cho phép khóa được lưu trữ nhiều lần trên một số máy chủ, làm tăng tốc độ phản ứng nhưng với chi phí của phần cứng hơn.
Một số kho khóa giá trị đảm bảo rằng các bản sao của khóa sẽ luôn luôn có giá trị giống như thầy. Bảo đảm này được gọi là hoàn toàn nhất quán. Nếu một cập nhật xảy ra trên máy chủ chủ giữ phím, tất cả các bản sao được đảm bảo được cập nhật.
Không phải tất cả các cửa hàng giá trị khóa đều đảm bảo trạng thái này (ví dụ như Riak), vì vậy nếu điều quan trọng là phải cập nhật cho mili giây, sau đó chọn một cơ sở dữ liệu có bản sao hoàn toàn nhất quán (như Aerospike).
Mô hình hóa dữ liệu trong các cửa hàng có giá trị khóa
Nhiều cửa hàng giá trị khóa chỉ hỗ trợ các cấu trúc cơ bản cho các loại giá trị của chúng, để lại lập trình ứng dụng với công việc giải thích dữ liệu. Hỗ trợ kiểu dữ liệu đơn giản thường bao gồm các chuỗi, số nguyên, JSON, và các giá trị nhị phân.
Đối với nhiều trường hợp sử dụng, điều này hoạt động tốt, nhưng đôi khi truy cập dữ liệu nhỏ hơn rất hữu ích.Ví dụ, Redis hỗ trợ các kiểu giá trị dữ liệu sau:
-
Dãy
-
Danh sách
-
Đặt
-
Bộ sưu tập
-
Bản đồ Hash
-
Mảng Bit
-
Nhật ký Hyperlog
được truy vấn để kết hợp các phạm vi của các giá trị - giống như truy vấn một chỉ mục các giá trị được sắp xếp theo ngày, rất hữu ích cho việc tìm kiếm tập con của dữ liệu đánh máy.
Hoạt động trên dữ liệu
Redis bao gồm các hoạt động để tăng và giảm các giá trị chính trực tiếp, mà không cần phải thực hiện các bước cài đặt lần đọc-sửa đổi-cập (RMU). Bạn có thể làm như vậy trong một giao dịch duy nhất để đảm bảo rằng không có ứng dụng khác thay đổi giá trị trong quá trình cập nhật. Các thao tác cụ thể kiểu dữ liệu này bao gồm thêm và xóa các mục vào danh sách và bộ.
Bạn thậm chí có thể cung cấp tính năng tự động hoàn thành trên giao diện người dùng của ứng dụng bằng cách sử dụng lệnh Redis ZRANGEBYLEX. Lệnh này lấy ra một tập hợp các phím mà một phần phù hợp với một chuỗi. Vì vậy, nếu bạn đã gõ "NoSQL for" trong thanh tìm kiếm của một ứng dụng được xây dựng trên Redis, bạn sẽ thấy đề xuất "NoSQL For Dummies. "
Đánh giá Redis
Redis tự hào là một cửa hiệu có trọng lượng rất nhẹ nhưng có tốc độ nhanh. Ban đầu nó được thiết kế để trở thành một cửa hàng có giá trị trong bộ nhớ, nhưng hiện nay nó tự hào về dung lượng lưu trữ trên đĩa.
Bạn có thể sử dụng Redis để bảo vệ dữ liệu bằng cách kích hoạt chế độ AOF (chỉ thêm tệp) và hướng Redis ép dữ liệu vào đĩa trên mỗi truy vấn (được gọi là fsync flushing>). AOF làm chậm viết, tất nhiên, nhưng nó cung cấp một mức độ cao hơn về độ bền cho dữ liệu. Tuy nhiên, lưu ý rằng vẫn có thể mất đến một giây lệnh. Ngoài ra, Redis chỉ mới đây hỗ trợ bổ sung cho clustering. Trên thực tế, vào thời điểm viết bài này, sự hỗ trợ clustering của Redis đang trong giai đoạn thử nghiệm beta. May mắn thay, Redis sử dụng một mô hình cluster không dùng chung, với các bậc thầy cho các khóa cụ thể và nô lệ mà không bao giờ được trực tiếp viết ra bởi một khách hàng; chỉ có bậc thầy làm như vậy. Cung cấp chia sẻ không có gì clustering nên làm cho nó dễ dàng hơn cho Redis thực hiện clustering đáng tin cậy hơn cho các cơ sở dữ liệu cho phép viết cho tất cả các bản sao.
Nếu bạn muốn có một bộ nhớ cache trong bộ nhớ ở tốc độ rất cao ở phía trước của cơ sở dữ liệu khác - MongoDB hoặc Riak thường được sử dụng với Redis - sau đó đánh giá Redis như là một lựa chọn. Khi sự hỗ trợ cho việc phân cụm và độ bền của dữ liệu tiến triển, có lẽ Redis có thể vượt qua các cơ sở dữ liệu back-end khác.