You are on page 1of 56

BAN CƠ YẾU CHÍNH PHỦ

HỌC VIỆN KỸ THUẬT MẬT MÃ


¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

AN TOÀN CƠ SỞ DỮ LIỆU
Đề tài
Hệ quản trị CSDL phi quan hệ - NoSQL
Couchbase và vấn đề bảo mật

Chuyên ngành: An toàn thông tin

Sinh viên thực hiện:


- Bùi Xuân Tài
- Bùi Anh Tuấn
- Nguyễn Hồng Hải
- Nguyễn Hữu Hoàng

Cán bộ hướng dẫn :


GV. Trần Thị Lượng
Khoa An toàn thông tin – Học viện Kỹ thuật mật mã

Hà Nội, 12/2017

I
MỤC LỤC
Lời nói đầu....................................................................................................................... 1

Chương 1: Tổng quan.....................................................................................................2

1. Giới thiệu couchbase...............................................................................................2

2. Giao diện lập trình thống nhất.................................................................................3

3. Truy vấn..................................................................................................................3

4. Tìm kiếm toàn văn...................................................................................................4

5. Nền tảng di động và nền tảng IoT............................................................................4

6. Phân tích..................................................................................................................4

7. Cơ sở dữ liệu Core...................................................................................................4

8. Kiến trúc Scale-out..................................................................................................5

9. Kiến trúc bộ nhớ ưu tiên..........................................................................................6

10. Dữ liệu lớn và tích hợp SQL................................................................................6

11. An toàn toàn bộ ngăn xếp.....................................................................................6

12. Triển khai container và đám mây.........................................................................7

13. Tính sẵn sàng cao.................................................................................................7

14. Tóm lược.............................................................................................................. 8

Chương 2: Hệ quản trị cơ sở dữ liệu couchbase............................................................9

1. Tổng quan................................................................................................................9

2. Mô hình dữ liệu.......................................................................................................9

2.1. Mô hình dữ liệu hướng tài liệu..........................................................................9

2.2. Sơ đồ động......................................................................................................11

2.3. Cân nhắc thiết kế tài liệu.................................................................................12

2.4. Normalization và denormalization..................................................................13

3. Truy cập dữ liệu.....................................................................................................14

3.1. Sự hoạt động của key- value...........................................................................14


II
3.2. Các view MapReduce.....................................................................................15

3.3. Truy vấn với N1QL.........................................................................................16

3.4. Tìm kiếm toàn văn..........................................................................................18

4. Sự khác biệt giữa N1QL và SQL...........................................................................19

4.1. Mô hình dữ liệu...............................................................................................19

4.2. Chiếu dữ liệu...................................................................................................20

4.3. Lựa chọn dữ liệu.............................................................................................22

4.4. Lọc dữ liệu......................................................................................................22

5. Lập chỉ mục...........................................................................................................23

6. Quản lý dữ liệu......................................................................................................25

6.1. Thuộc tính nguyên tử......................................................................................25

6.2. Tính nhất quán và độ bền................................................................................25

6.3. Sự nhất quán của chỉ mục và bản sao..............................................................27

6.4. Tunable Durability Requirements...................................................................27

6.5. Truy cập đồng thời..........................................................................................28

6.6. Tài liệu hết hạn...............................................................................................28

Chương 3: Bảo mật trong Coachbase..........................................................................29

1. Tổng quan..............................................................................................................29

2. Chứng thực bằng chứng chỉ...................................................................................29

2.1. Điều kiện chứng thực......................................................................................30

2.2. Bật tính năng xác thực dựa trên chứng chỉ x.509 trên máy chủ.......................30

3. Xác thực bằng mật khẩu........................................................................................32

3.1. Xác thực cho Quản trị viên.............................................................................32

3.2. Xác thực cho các ứng dụng.............................................................................33

3.3. Cơ chế xác thực mật khẩu...............................................................................33

4. Ủy quyền...............................................................................................................34

III
4.1. RBAC dành cho Quản trị viên........................................................................34

4.2. RBAC cho các ứng dụng................................................................................35

4.3. Quản lý người dùng RBAC.............................................................................35

4.4. Tài nguyên Dưới Điều khiển Truy cập............................................................35

4.5. Nâng cấp lên RBAC........................................................................................35

5. Kiểm tra.................................................................................................................36

5.1. Các sự kiện kiểm tra........................................................................................36

5.2. Các đối tượng cần kiểm tra.............................................................................38

6. Mã hóa...................................................................................................................40

6.1. Mã hóa lúc ngừng hoạt động...........................................................................41

6.2. Mã hóa đối tượng............................................................................................41

6.3. Mã hóa trong ứng dụng...................................................................................44

6.4. Secret-Management........................................................................................45

Kết luận..........................................................................................................................46

Tài liệu tham khảo.........................................................................................................47

IV
Danh mục hình vẽ
Hình 1. Mô hình quan hệ cho lịch trình chuyến bay.......................................................10
Hình 2. Mô hình dữ liệu hướng dẫn tài liệu cho việc đặt chuyến bay.............................11
Hình 3. Xác minh chứng chỉ...........................................................................................43
Hình 4. Chọn chứng chỉ gốc trong vai trò Quản trị viên.................................................43
Hình 5. Chứng chỉ gốc (minh họa).................................................................................44

V
Lời nói đầu

Trong vài năm qua chúng ta đã thấy sự gia tăng của một loại cơ sở dữ liệu
mới, đó là cơ sở dữ liệu NoSQL - mà đang thách thức sự thống trị của cơ sở dữ
liệu quan hệ. Cơ sở dữ liệu quan hệ đã thống trị ngành công nghiệp phần mềm
trong một thời gian dài khi đã cung cấp cơ chế để lưu trữ dữ liệu liên tục, đồng
thời kiểm soát, giao dịch, giao diện được chuẩn hóa và được tích hợp vào các hệ
thống dữ liệu ứng dụng, báo cáo. Tuy nhiên, ưu thế đó đã không còn tồn tại cho cơ
sở dữ liệu quan hệ nữa. Nội dung báo cáo này sẽ tập trung vào ứng dụng của
NoSQL và các vấn đề bảo mật xung quanh nó.
Chúng em xin chân thành cảm ơn cô Nguyễn Thị Lượng đã tận tình hướng
dẫn và đưa ra những nhận xét giúp báo cáo của nhóm được hoàn thiện hơn.

VI
Chương 1: Tổng quan

1. Giới thiệu couchbase


Các ứng dụng quan trọng ngày nay đòi hỏi hỗ trợ hàng triệu tương tác với
người dùng cuối. Các cơ sở dữ liệu truyền thống đã được xây dựng từ lâu, được
thiết kế cho tính nhất quán và kiểm soát nhưng thiếu tính linh hoạt và khả năng mở
rộng. Để đáp ứng các yêu cầu này các tổ chức buộc phải triển khai nhiều loại cơ sở
dữ liệu, dẫn đến việc phải dùng nhiều cơ sở dữ liệu và không hiệu quả, chậm trễ và
trải nghiệm không cao. Các cơ sở dữ liệu thực tế được lưu trữ trên điện toán đám
mây. Một nền tảng quản lý dữ liệu đám mây mang lại cho bạn một lợi thế cạnh
tranh cao.
Các doanh nghiệp nhận ra rằng các ứng dụng chưa đáp ứng đầy đủ được yêu
cầu của khách hàng. Giao diện ứng dụng chỉ là sự trải nghiệm ban đầu chưa phải là
điều quan trọng nhất, cơ sở dữ liệu bên dưới mới là cốt lõi. Cơ sở dữ liệu
Engagement tạo ra nhiều sự tương tác và trải nghiệm bằng cách giải phóng toàn bộ
tiềm năng của dữ liệu, ở bất kỳ quy mô nào, qua bất kỳ kênh hoặc thiết bị nào, để
thúc đẩy một mối quan hệ có ý nghĩa hơn.
Couchbase Server là một phần mềm nguồn mở, phân tán. Nó cho thấy một
kho lưu trữ giá trị nhanh với bộ nhớ cache được quản lý cho các hoạt động dữ liệu
dưới mili giây, trình tạo chỉ mục cho các truy vấn nhanh và một công cụ truy vấn
mạnh mẽ để thực hiện các truy vấn giống như SQL. Đối với môi trường di động và
Internet, Couchbase cũng chạy trực tiếp trên thiết bị và quản lý đồng bộ hóa với
máy chủ.
Couchbase Server chuyên cung cấp công cụ quản lý dữ liệu có độ trễ thấp
cho các ứng dụng tương tác web, di động và IoT quy mô lớn. Các yêu cầu chung
của Couchbase Server được thiết kế để thỏa mãn bao gồm:
- Giao diện lập trình thống nhất
- Truy vấn
- Tìm kiếm

VII
- Mobile và IoT
- Phân tích
- Công cụ cơ sở dữ liệu lõi
- Kiến trúc bộ nhớ đầu tiên
- Dữ liệu lớn và tích hợp SQL
- Bảo mật toàn stack
- Triển khai container và đám mây
- Tính sẵn sàng cao

2. Giao diện lập trình thống nhất


Couchbase Data Platform cung cấp các API phát triển ứng dụng đơn giản,
thống nhất và mạnh mẽ trên nhiều ngôn ngữ lập trình, cách kết nối và các công cụ
làm cho các ứng dụng xây dựng đơn giản và đẩy nhanh thời gian cho ra mắt các
ứng dụng.
Couchbase rất đơn giản để triển khai và quản lý. Các tính năng như sao lưu
được tích hợp sẵn và tự động. Sự thay đổi cấu trúc liên kết xảy ra minh bạch mà
không cần thay đổi ứng dụng hoặc các nút Couchbase khác. Mỗi nút Couchbase
Server bao gồm phần mềm hoàn toàn giống hệt nhau, tự động hóa dễ dàng. Toàn
bộ cụm được quản lý thông qua một bảng điều khiển duy nhất dành cho quản trị
viên, cung cấp việc mở rộng cụm và cân bằng lại. Ngay cả những công nghệ tiên
tiến, chẳng hạn như nhân rộng trung gian dữ liệu, có thể được cấu hình với một cú
nhấn chuột trong Couchbase Web Console.

3. Truy vấn
Cung cấp nhiều đường truy cập dữ liệu để truy vấn và quản lý tài liệu JSON.
Nhà phát triển ứng dụng có thể chọn mô hình truy cập dữ liệu đáp ứng tốt nhất yêu
cầu của họ. Đường dẫn truy cập dữ liệu linh hoạt làm cho Couchbase hữu ích cho
nhiều ứng dụng và trường hợp sử dụng.
Couchbase Server có thể được truy vấn bằng cách sử dụng N1QL, một
phương ngữ SQL thể hiện, mạnh mẽ và đầy đủ để truy vấn, chuyển đổi và điều
VIII
khiển dữ liệu JSON. Như SQL, nó ngay lập tức quen thuộc với các nhà phát triển -
những người có thể nhanh chóng bắt đầu phát triển các ứng dụng phong phú.
Không giống như các cơ sở dữ liệu NoSQL khác, Couchbase hỗ trợ JOIN, cho
phép một loạt các mô hình dữ liệu. Để giúp người dùng phát triển các ứng dụng
phong phú với sự linh hoạt, N1QL được hỗ trợ bởi một cơ sở hạ tầng chỉ mục
phong phú và cũng có các phần mở rộng cho phép xử lý các tài liệu không đồng
nhất với cấu trúc lồng nhau. N1QL có thể truy cập vào một loạt các công cụ để
phân tích và tích hợp dữ liệu thông qua JDBC và ODBC, chẳng hạn như Microsoft
Excel và Tableau.

4. Tìm kiếm toàn văn


Tích hợp tìm kiếm toàn văn giúp đơn giản hóa cho các nhà phát triển thêm
sự thông minh vào ứng dụng. Các chỉ mục văn bản đầy đủ được quản lý tự động
trong Couchbase cluster, tránh thời gian trễ, chi phí và phức tạp trong việc quản lý
một sản phẩm tìm kiếm và cơ sở hạ tầng riêng.

5. Nền tảng di động và nền tảng IoT


Cung cấp nền tảng dữ liệu đầy đủ cho các ứng dụng di động và IoT của bạn,
đồng bộ hóa dữ liệu trong thời gian thực, bảo mật cấp doanh nghiệp và tích hợp dữ
liệu vào hệ sinh thái của bạn.

6. Phân tích
Couchbase analytics cung cấp xử lý truy vấn song song mạnh mẽ. Được
thiết kế để thực hiện hiệu quả các truy vấn phức tạp, dài có chứa join phức tạp,
thiết lập, tập hợp và hoạt động nhóm. Giải quyết các thách thức của việc hỗ trợ
ứng dụng đáp ứng, khả năng mở rộng và phân tích đặc biệt trên cùng tập dữ liệu.

7. Cơ sở dữ liệu Core
Công cụ cơ sở dữ liệu lõi cung cấp các khả năng cơ bản cho việc quản lý và
lập chỉ mục tài liệu. Dựa trên bộ nhớ thứ nhất, cấu trúc bất đồng bộ ở mọi nơi, điều
IX
này bao gồm các năng lực cốt lõi của công cụ cơ sở dữ liệu, như: lưu trữ dữ liệu,
sao chép liên nút.

Tài liệu Couchbase là JSON, một định dạng tự mô tả có thể biểu diễn các
cấu trúc và mối quan hệ phong phú. Không giống như RDBMS truyền thống, lược
đồ trong Couchbase Server là một cấu trúc logic được định nghĩa hoàn toàn trong
mã ứng dụng và được lưu giữ trong cấu trúc của các tài liệu lưu trữ. Vì không có
giản đồ rõ ràng để duy trì, các nhà phát triển có thể thêm các đối tượng và thuộc
tính mới vào bất kỳ lúc nào chỉ bằng cách đẩy mã ứng dụng mới lưu trữ JSON mới
mà không cần phải thực hiện các thay đổi tương tự cho các lược đồ. Điều này cho
phép các ứng dụng phát triển nhanh chóng và liền mạch.
Couchbase là một cơ sở dữ liệu tham gia phục vụ các yêu cầu của khách
hàng ở quy mô internet. Điều này tương phản với các cơ sở dữ liệu phân tích như
Hadoop và Spark và các môi trường học máy mà các nhà phân tích hoặc các nhà
khoa học dữ liệu truy cập được có thể chịu đựng được độ trễ lớn hơn.

8. Kiến trúc Scale-out


Để cung cấp những trải nghiệm khách hàng đặc biệt, bạn cần phải đảm bảo
rằng cơ sở dữ liệu tham gia của bạn luôn luôn hoạt động, luôn đáp ứng và có thể
mở rộng để đáp ứng các khối lượng công việc thay đổi. Couchbase cung cấp tích
hợp trong lưu trữ và xử lý dữ liệu. Kiến trúc này đảm bảo rằng ứng dụng luôn hoạt
động bằng cách cung cấp khả năng phát hiện và phục hồi từ sự cố phần cứng và
mạng.
Couchbase được thiết kế để dễ dàng mở rộng các phần cứng và có hiệu quả
về phần cứng hơn các cơ sở dữ liệu NoSQL khác. Nhân rộng và sharding là những
tính năng cơ bản của Couchbase Server. Nó tự động phân phối dữ liệu qua các nút
trong cluster. Do đó, cơ sở dữ liệu có thể phát triển theo chiều ngang để chia sẻ tải
bằng cách thêm RAM, đĩa và dung lượng CPU mà không làm tăng gánh nặng cho
các nhà phát triển và quản trị viên. Couchbase Server đạt hiệu suất phần cứng cao
bằng cách sử dụng I / O không đồng bộ, không khóa ở tất cả các cấp để sử dụng
X
hiệu quả các tài nguyên máy chủ. Điều này tối đa hoá cả I / O lưu trữ và số lượng
khách hàng kết nối đồng thời trên mỗi nút. Couchbase kiến trúc đảm bảo rằng khối
lượng công việc được phân bố đều trên các nút cluster, giảm tắc nghẽn và cho
phép người dùng tận dụng các phần cứng có sẵn.
9. Kiến trúc bộ nhớ ưu tiên
Khách hàng mong đợi và yêu cầu ứng dụng nhanh, đáp ứng đủ như cầu. Nền
tảng dữ liệu Couchbase cung cấp một kiến trúc có hiệu suất cao, đảm bảo rằng tất
cả các hoạt động xảy ra trong bộ nhớ và cung cấp các tùy chọn quản lý dữ liệu tối
ưu hóa bộ nhớ. Couchbase được thiết kế để xử lý lưu lượng truy cập dữ liệu trực
tuyến - đọc và viết lớn cho các ứng dụng web, di động và IoT hiện đại. Đối với
Couchbase, độ trễ thấp ở quy mô thường dùng để chỉ các lần đọc và viết một phần
không đổi của mili giây. Mặc dù tốc độ thô tối đa rất quan trọng nhưng nhiều
người lại quan tâm đếntốc độ cao và thời gian trễ thấp với sự khác biệt tối thiểu
trong khối lượng công việc. Couchbase tiếp tục cung cấp hiệu suất cao nhất kể cả
khi chịu tải nặng. Khả năng dự đoán và nhất quán đảm bảo đáp ứng và cải thiện
trải nghiệm người dùng trong triển khai thực tế.
Couchbase Server là một hệ thống tập trung vào bộ nhớ, giúp lưu trữ các tài
liệu, siêu dữ liệu và các chỉ mục thường xuyên truy cập trong RAM, thông qua khả
năng đọc / ghi cao ở độ trễ rất thấp. Những khả năng này phát sinh từ Couchbase
của đối tượng quản lý tích hợp bộ nhớ cache mà là một bảng băm phân phối với
khả năng tương thích memcached đầy đủ. Cơ sở dữ liệu tài liệu làm cho việc sử
dụng nặng của đối tượng được quản lý bộ nhớ cache.

10.Dữ liệu lớn và tích hợp SQL


Couchbase Data Platform bao gồm tích hợp Big Data và tích hợp SQL, cho
phép bạn tận dụng các công cụ, khả năng xử lý, và dữ liệu bất cứ nơi nào nó có thể
lưu trữ.

11.An toàn toàn bộ ngăn xếp

XI
Bảo vệ dữ liệu khách hàng là điều bắt buộc, cả từ việc tuân thủ và từ góc
nhìn truy cập dữ liệu cơ bản. Couchbase Data Platform cung cấp dữ liệu an toàn ở
mọi nơi - trên dây, trên thiết bị, trong đám mây và trong trung tâm dữ liệu.

XII
12.Triển khai container và đám mây
Các doanh nghiệp đang nhanh chóng áp dụng chiến lược điện toán đám mây
để tạo ra và cung cấp sự đổi mới nhanh hơn và thích nghi với sự thay đổi liên tục
trong nhu cầu kinh doanh. Couchbase hỗ trợ tất cả các nền tảng đám mây, cũng
như một loạt các container và các công nghệ ảo hóa để hoạt động.

13.Tính sẵn sàng cao


Được xây dựng với sự nhấn mạnh về độ tin cậy, tính sẵn sàng cao và quản
lý đơn giản, một tính năng quan trọng của Couchbase Server là tất cả các hoạt
động đều có thể được thực hiện trong khi hệ thống vẫn trực tuyến mà không cần
phải sửa đổi hay làm gián đoạn các ứng dụng đang chạy. Hệ thống không bao giờ
cần phải được thực hiện ngoại tuyến để bảo trì thường xuyên như nâng cấp phần
mềm, xây dựng chỉ mục, nén dữ liệu, làm mới phần cứng, hoặc bất kỳ hoạt động
khác. Ngay cả việc cung cấp hoặc gỡ bỏ các nút có thể được thực hiện hoàn toàn
trực tuyến mà không bị gián đoạn chạy các ứng dụng và không yêu cầu các nhà
phát triển sửa đổi các ứng dụng của họ.
Không kém phần quan trọng, Couchbase Server được xây dựng trong các cơ
chế chịu lỗi chống lại thời gian chết do sự cố bất ng, bao gồm cả sự ngưng hoạt
động của máy chủ. Nhân rộng và chuyển đổi dự phòng là những cơ chế quan trọng
làm tăng tính khả dụng của hệ thống. Máy chủ Couchbase sao chép dữ liệu qua
nhiều nút để hỗ trợ chuyển đổi dự phòng. Đảm bảo rằng các bản sao bổ sung của
dữ liệu có sẵn được tự động để đối phó với những sự gián đoạn không thể tránh
khỏi mà hệ thống phân phối lớn được thiết kế để phục hồi. Tất cả điều này được
thực hiện tự động mà không cần can thiệp bằng tay hoặc thời gian chết.
Toàn bộ Couchbase Server clusters có thể được sao chép đến một hoặc
nhiều vị trí địa lý thay thế bằng cách sử dụng Cross Data Center Replication
(XDCR), một công nghệ cung cấp tính sẵn sàng cao, phục hồi thảm họa và cân
bằng tả. XDCR giải quyết những thách thức duy nhất vốn có trong việc liên kết
các cụm liên quan đến mạng diện rộng (WAN) chứ không chỉ đơn giản là mở rộng
việc sao chép cụm địa phương qua mạng WAN.
XIII
14.Tóm lược
Nhiều cơ sở dữ liệu có thể thỏa mãn một hoặc nhiều các yêu cầu này nhưng
đòi hỏi sự cân bằng khi chạy với các ứng dụng quan trọng trên phạm vi internet.
Ví dụ, một giải pháp có thể mang lại tính linh hoạt cho mô hình dữ liệu, có thể rất
linh hoạt trong mô hình dữ liệu nhưng không có khả năng thêm hoặc xoá các nút
mà không có ảnh hưởng nghiêm trọng đến sự hoạt động. Một giải pháp khác có thể
chứng minh khả năng mở rộng tốt mà không có khả năng lập chỉ mục và thay đổi
mô hình dữ liệu khi đang di chạy. Couchbase Server được thiết kế để cung cấp trải
nghiệm nhà phát triển tuyệt vời và quản lý dễ dàng trong khi vẫn cung cấp hiệu
suất vượt trội ở quy mô khác nhau, cho dù trong đám mây, trong một container, tại
chỗ hoặc trên các thiết bị khác.

XIV
Chương 2: Hệ quản trị cơ sở dữ liệu couchbase

1. Tổng quan
Couchbase Server là một cơ sở dữ liệu hướng tài liệu NoSQL mã nguồn mở
cung cấp quản lý dữ liệu độ trễ thấp cho các ứng dụng trực tuyến tương tác quy mô
lớn. Nó được thiết kế để quy mô dễ dàng và hiệu suất cao, được xây dựng với sự
nhấn mạnh về độ tin cậy, tính sẵn sàng cao và quản lý đơn giản, Couchbase phục
vụ dữ liệu liên tục với sự can thiệp tối thiểu của nhà phát triên.
Couchbase Server có thể được sử dụng như là một:
- Bộ nhớ đệm được quản lý
- Một nơi lưu trữ key- value
- Một cơ sở dữ liệu hướng tài liệu
Couchbase Server cùng với Couchbase Mobile cho phép các doanh nghiệp
tăng linh hoạt của doanh nghiệp, đạt được thời gian nhanh hơn để phục vụ thị
trường và hoạt động trên quy mô toàn cầu đồng thời giảm chi phí. Couchbase giúp
đáp ứng các yêu cầu cho nhiều nhu cầu khác nhau, từ doanh nghiệp sang cơ sở hạ
tầng đám mây, đến Internet of Things và dữ liệu lớn, cho các thiết bị di động.

2. Mô hình dữ liệu
2.1. Mô hình dữ liệu hướng tài liệu
Tài liệu được lưu trữ trong Couchbase Server ở định dạng JSON, một ký
pháp đơn giản, nhẹ gọn và nhỏ gọn có thể đọc được của con người. JSON hỗ trợ cả
hai kiểu dữ liệu cơ bản như số và chuỗi và các kiểu phức tạp như từ điển và mảng
nhúng.
Có một số lợi thế khi sử dụng JSON làm định dạng dữ liệu trong
Couchbase. JSON là trung gian của việc trao đổi dữ liệu trong các ứng dụng di
động và trên web: đây là loại trả về API REST phổ biến nhất. Do tính phổ biến
này, JSON rất dễ dàng và hiệu quả để tạo và sử dụng từ bất kỳ ngôn ngữ lập trình

XV
nào. Serialization và deserialization rất nhanh. JSON là nguồn gốc của JavaScript,
điều này làm cho nó rất thuận tiện cho việc lập trình ứng dụng web.
Trong Couchbase, một tài liệu thường đại diện cho một thể hiện duy nhất
của một đối tượng trong mã ứng dụng. Tài liệu Couchbase giống như các hàng
trong một bảng quan hệ: mỗi một là một bản ghi. Mỗi thuộc tính giống như một
cột trong bảng.
Không giống như một bảng quan hệ, tuy nhiên, các tài liệu của các lược đồ
khác nhau có thể được lưu trữ trong Couchbase. Nếu một ứng dụng muốn phân
biệt giữa nhiều loại, có thể thực hiện một số cách tiếp cận (như thêm trường 'type'
trong một tài liệu, như được hiển thị bên dưới).
Tài liệu couchbase bản thân có thể chứa các cấu trúc lồng nhau (tiểu tài
liệu). Điều này cho phép các nhà phát triển dễ dàng thể hiện các mối quan hệ
nhiều-nhiều mà không đòi hỏi phải có một "bảng tham chiếu" hoặc "bảng giao lộ".
Nó cũng diễn tả cho dữ liệu phân cấp tự nhiên.
Để hiểu mô hình tài liệu trên thực tế, hãy suy nghĩ về một đơn đặt chỗ
chuyến bay trực tuyến cho phép người sử dụng tìm kiếm các chuyến bay theo ngày
tháng. Trong một mô hình dữ liệu quan hệ, sẽ có các bảng cho các hãng hàng
không, chuyến bay và lịch trình trong số nhiều người khác có thể trông giống như
hình dưới đây.

Hình 1. Mô hình quan hệ cho lịch trình chuyến bay

XVI
Tuy nhiên, trong Couchbase, mô hình hướng tài liệu có thể là một đối tượng
tuyến đường duy nhất nhúng một mảng lịch cho tất cả các chuyến bay giữa hai sân
bay.

Hình 2. Mô hình dữ liệu hướng dẫn tài liệu cho việc đặt chuyến bay

Trái ngược với mô hình quan hệ, mỗi tài liệu tuyến đường đều chứa một yêu
cầu duy nhất cho một nút Couchbase có thể trả lại tất cả các thông tin cần thiết để
hoàn thành yêu cầu của ứng dụng. Sự độc lập của các tài liệu có ý nghĩa quan
trọng đối với khả năng mở rộng và độ trễ. Ví dụ, các tài liệu có thể dễ dàng sao
chép hoặc thay đổi mà không ảnh hưởng đến bất kỳ tài liệu nào khác. Điều này
cho phép Couchbase theo chiều ngang bằng cách sử dụng một nhóm các phần
cứng mà không cần yêu cầu các nút phải phối hợp để đáp ứng yêu cầu của ứng
dụng.

2.2. Sơ đồ động
Trong Couchbase, khi chúng ta đề cập đến một giản đồ, chúng ta đề cập đến
cách ứng dụng cấu trúc các tài liệu của nó. Trái với RDBMS truyền thống, các
lược đồ trong Couchbase được xác định và quản lý hoàn toàn bởi ứng dụng.
Các tài liệu Couchbase lấy các lược đồ chỉ từ cấu trúc của JSON. Thay vì cơ
sở dữ liệu thực thi lược đồ và yêu cầu tất cả dữ liệu thống nhất, Couchbase (và
NoSQL nói chung) chuyển điều khiển này sang ứng dụng và đơn giản hóa nó ở
mức cơ sở dữ liệu. Thiết kế này cho phép thay đổi giữa các tài liệu, thậm chí các
tài liệu cùng loại. Hãy xem xét một cửa hàng bán lẻ trực tuyến lớn có chứa nhiều
XVII
sản phẩm văn phòng, chẳng hạn như bút và máy in laser. Mặc dù nhiều thuộc tính
như kích thước hoặc trọng lượng sẽ áp dụng cho cả hai mặt hàng, chỉ một số tài
liệu cần có các thuộc tính như "kiểu kết nối" và "in hai mặt". Với Couchbase
Server, không cần phải tạo ra vô số các thuộc tính null hoặc để xác định hàng trăm
các lược đồ khác nhau để xử lý các dữ liệu đó - các thuộc tính cần thiết có thể
được đưa vào các tài liệu cần đến và chỉ cần bỏ đi những tính năng không cần
thiết. Các tài liệu lược đồ linh hoạt cũng phù hợp với dữ liệu có kích thước khác
nhau, chẳng hạn như ví dụ đặt chỗ chuyến bay ở trên: không có gì khác biệt khi
một số tài liệu định tuyến chứa hàng ngàn chuyến bay theo lịch trình và một số
khác chỉ có một vài chuyến bay.
Vì một lược đồ trong Couchbase là một cấu trúc logic được xác định bởi
ứng dụng nên các lược đồ vì vậy là động - chúng thay đổi cùng với ứng dụng của
bạn, cho phép nó thực sự nhanh nhẹn. Đối với người lập trình, lợi ích quan trọng
của các lược đồ linh hoạt là các đối tượng có thể được định nghĩa một lần trong mã
ứng dụng hơn là cần phải được xác định và giữ đồng bộ trong cả hai mã ứng dụng
và riêng trong một giản đồ cơ sở dữ liệu. Không giống như một RDBMS truyền
thống với một giản đồ cố định, một lập trình viên có thể thêm thuộc tính hoặc cấu
trúc vào một số tài liệu mà không cần quay lại và thêm chúng vào các tài liệu khác
cùng loại. Bằng cách này, các ứng dụng có thể phát triển mà không yêu cầu lập
trình thay đổi cấu trúc của các bảng bên dưới, quản lý phiên bản lược đồ hoặc chịu
rắc rối về di chuyển lược đồ.
Lợi thế cho một giản đồ ứng dụng được xác định là rõ ràng trong các ứng
dụng lớn và lâu dài. Các nhà phát triển có thể thay đổi mã ứng dụng và có giản đồ
được cập nhật ngay lập tức được lưu trữ và truy cập được. Tài liệu có thể phát triển
liên tục theo thời gian khi ứng dụng web thay đổi.

2.3. Cân nhắc thiết kế tài liệu


Các tài liệu linh hoạt giúp cho việc xây dựng lược đồ trở nên dễ dàng hơn
nhưng vẫn cần thiết kế JSON để có hiệu suất và khả năng mở rộng tốt nhất. Câu
hỏi chính là có bao nhiêu thông tin để đưa vào một tài liệu duy nhất. Tốt hơn là có
XVIII
ít tài liệu phong phú hơn nhúng thông tin phức tạp, hoặc nhiều hơn, các tài liệu
đơn giản hơn tham khảo các tài liệu đơn giản được duy trì độc lập khác? Để trả lời
câu hỏi này, hãy xem xét các mẫu truy cập thông tin và cách các đối tượng được
quản lý trong mã ứng dụng. Thuộc tính nhóm với nhau phải được truy cập hoặc
viết đồng thời thông thường mang lại khả năng mở rộng tốt nhất và hiệu năng: tất
cả các thông tin đều được đọc hoặc ghi trong một thao tác, tính nguyên tử được cải
thiện bởi vì tất cả các đột biến xảy ra cùng một lúc và khả năng mở rộng cải thiện
vì có ít mối quan hệ giữa các đối tượng. Thuộc tính nhóm lại với nhau cũng đảm
bảo rằng chúng vẫn phù hợp với nhau - các thuộc tính liên quan đến logic, miễn là
chúng tồn tại trong cùng một tài liệu, có thể được đọc và cập nhật vĩ mô. Mặt khác,
nhiều tài liệu đơn giản thường nên được ưa chuộng khi các mẫu truy cập có thể dự
đoán được và kích thước của thông tin được vận chuyển cần phải được giữ càng
nhỏ càng tốt để giảm thiểu việc sử dụng mạng.
Tài liệu cũng có thể thiết lập các mối quan hệ cơ bản với các tài liệu khác.
Sử dụng JOIN bạn có thể dễ dàng lấy các tài liệu và tài liệu liên quan qua N1QL,
ngôn ngữ truy vấn Couchbase (SQL-like). Có khả năng này liên quan đến năng lực
được xây dựng để N1QL làm cho đề cập đến các tài liệu khác đáng kể đơn giản
hơn trong Couchbase nhưng trái ngược với các cơ sở dữ liệu NoSQL khác.

2.4. Normalization và denormalization


Vì lý do hiệu suất, Couchbase khuyến khích người dùng giữ lại dữ liệu được
truy cập cùng nhau, mặc dù nó có thể dẫn đến nhân bản, lặp lại giá trị, hoặc các giá
trị phi nguyên tử. Các ràng buộc bình thường mang lại khả năng mở rộng tốt hơn
và hiệu suất truy vấn với chi phí nhỏ có thể làm tăng kích thước dữ liệu.

XIX
3. Truy cập dữ liệu
Couchbase cung cấp nhiều cách truy cập dữ liệu: sử dụng mẫu truy cập giá
trị khóa, truy vấn dữ liệu bằng MapReduce (lượt xem) hoặc N1QL. Bạn cũng có
thể sử dụng tính năng Tìm kiếm Toàn văn (FTS) để truy vấn dữ liệu.
Ở cấp độ cao, truy cập khóa-giá trị cung cấp đường dẫn truy cập hiệu năng
cao trực tiếp đến dữ liệu bằng cách sử dụng khoá cho mục được lưu trữ. Đối với
các ứng dụng đang tìm thời gian trễ milli giây lẻ, phương pháp giá trị khóa cung
cấp truy cập nhanh nhất dữ liệu của bạn. Tuy nhiên, không phải tất cả các truy cập
dữ liệu có thể có một chìa khóa trong tay và đó là nơi các truy vấn đi vào. Các truy
vấn có thể được thực hiện bằng cách sử dụng xem MapReduce và N1QL. N1QL
cung cấp một ngôn ngữ truy vấn linh hoạt và khai báo giống như truy cập SQL
được cung cấp bởi cơ sở dữ liệu quan hệ. N1QL thật tuyệt vời để truy cập nhanh
vào dữ liệu của bạn cho các hoạt động như tra cứu thứ cấp về các thuộc tính trong
tài liệu JSON của bạn. Ví dụ: tra cứu người dùng bằng địa chỉ email người dùng và
không phải là userID được sử dụng cho khoá tài liệu.
Chế độ xem cũng cung cấp một cách mạnh mẽ để lập chỉ mục dữ liệu với
bản đồ do người dùng định nghĩa và giảm chức năng. Chế độ xem có thể là một
lựa chọn mạnh mẽ để tái tạo lại và tập hợp dữ liệu trước. Chế độ xem là giải pháp
lý tưởng để báo cáo tương tác dữ liệu của bạn.

3.1. Sự hoạt động của key- value


Trung tâm của Couchbase phân phối giá trị khóa (KV) lưu trữ. Nơi lưu trữ
KV là một cách tiếp cận rất đơn giản, ít lược đồ để quản lý dữ liệu, như tên của nó,
lưu trữ một ID duy nhất (chìa khóa) cùng với một mẩu thông tin tùy ý (giá trị); nó
có thể được nghĩ như là một bản đồ băm hoặc từ điển. KV chính nó có thể chấp
nhận bất kỳ dữ liệu nào, dù là một blob nhị phân hay một tài liệu JSON, và các
tính năng Couchbase như N1QL và MapReduce tận dụng khả năng xử lý các tài
liệu JSON của kho lưu trữ KV.
Do tính đơn giản của chúng, các thao tác KV thực hiện với độ trễ cực thấp,
thường dưới mili giây. Mặc dù dịch vụ truy vấn được truy cập bởi một ngôn ngữ
XX
truy vấn được định nghĩa (N1QL), cửa hàng KV được truy cập bằng cách sử dụng
các API đơn giản (Tạo, Đọc, Cập nhật, Xóa) và do đó cung cấp một giao diện đơn
giản hơn khi truy cập các tài liệu sử dụng các ID của chúng .
Kho lưu trữ KV chứa trạng thái cập nhật mới nhất cho mỗi mặt hàng. Để
thực hiện tốt hơn, truy vấn và các dịch vụ MapReduce cung cấp cuối cùng các chỉ
mục thống nhất mà theo mặc định sử dụng một phiên bản dữ liệu có khả năng hơi
lỗi thời. Tuy nhiên, có thể chọn để đợi một thời gian ngắn để đảm bảo đã có cơ hội
cập nhật trước khi trả lời truy vấn. Ngược lại, truy vấn kho lưu trữ KV trực tiếp sẽ
luôn truy cập vào phiên bản mới nhất của dữ liệu.

3.2. Các view MapReduce


Các nhà phát triển có thể viết các chương trình JavaScript MapReduce tùy
chỉnh để xác định chỉ mục phức tạp và tập hợp các mục được lưu trữ trong
Couchbase. MapReduce là một mô hình lập trình để xử lý dữ liệu phân tán trên dữ
liệu có độ song song cao: chức năng bản đồ đọc tất cả các tài liệu trong toàn bộ
cụm, lọc chúng để chọn các thông tin có liên quan và sau đó phát ra các kết quả;
các loại chức năng giảm tải và kết hợp các kết quả. MapReduce hữu ích nhất cho
việc xử lý dữ liệu tùy biến cao trên các bộ đầu vào lớn.
Xử lý dữ liệu MapReduce là gia tăng, do đó đầu ra tiếp tục cập nhật khi dữ
liệu cơ bản trải qua sự đột biến.
Các lập trình viên cũng có thể viết các chương trình không gian MapReduce
hoạt động trên các dữ liệu hình học dưới dạng GeoJSON, dữ liệu số n chiều
(hyper-cubes) hoặc kết hợp cả hai. Điều này có thể được sử dụng để xử lý các truy
vấn về hình học, ví dụ, để trả lại một danh sách tất cả các mục trong một hộp giới
hạn cụ thể.
Các chương trình MapReduce xuất ra các Chế độ xem MapReduce hoặc
Chế độ Không gian, được mô tả thêm trong Lập chỉ mục.
Mặc dù N1QL cung cấp một giao diện truy vấn phong phú hơn, các ứng
dụng sẽ sử dụng kho lưu trữ KV khi tốc độ, tính nhất quán, và mẫu truy cập đơn
giản được ưa thích hơn các tùy chọn truy vấn linh hoạt.
XXI
Tất cả các hoạt động KV là vi mô, có nghĩa là Đọc và Cập nhật là các hoạt
động cá nhân. Để tránh xung đột có thể nảy sinh với nhiều bản cập nhật đồng thời
cho cùng một tài liệu, các ứng dụng có thể sử dụng Compare-And-Swap (CAS), là
một checksum cho mỗi tài liệu mà Couchbase sửa đổi mỗi lần khi một tài liệu
được thay đổi.

3.3. Truy vấn với N1QL


Couchbase Server có thể được lập trình bằng cách sử dụng SQL. Cho rằng
gần như tất cả các lập trình viên đã biết SQL, hầu hết các nhà phát triển sẽ có thể
bắt đầu một cách nhanh chóng trên Couchbase. Và vì hầu hết các tổ chức đã có số
lượng đáng kể mã SQL, Couchbase Server phù hợp công nghệ hiện tại một cách dễ
dàng. Hỗ trợ SQL bằng trình điều khiển JDBC và ODBC mở ra hệ sinh thái gồm
các công cụ để phân tích và tích hợp dữ liệu như Microsoft Excel và Tableau.
N1QL là ngôn ngữ truy vấn đầu tiên thúc đẩy sự linh hoạt hoàn toàn của
JSON với toàn bộ sức mạnh của SQL. Được phát triển bởi Couchbase để sử dụng
với Couchbase Server, N1QL cung cấp một ngôn ngữ truy vấn chung và mô hình
dữ liệu dựa trên JSON cho các cơ sở dữ liệu định hướng tài liệu phân tán.
Couchbase đã tạo ra phương ngữ SQL riêng gọi là N1QL để cung cấp cho
các nhà phát triển và doanh nghiệp một ngôn ngữ biểu cảm, mạnh mẽ và đầy đủ để
truy vấn, chuyển đổi và điều khiển dữ liệu JSON. Công cụ truy vấn N1QL được
tối ưu hóa cho thực thi đa nhân song song, hiện đại. N1QL có các phần mở rộng
đặc biệt cho phép xử lý các tài liệu có cấu trúc biến đổi và / hoặc được lồng nhau.
Cũng như SQL hoạt động trên hàng, cột và bảng của một RDBMS và trả về các
hàng và cột cho ứng dụng, N1QL hoạt động trên JSON và trả về JSON cho ứng
dụng.

XXII
N1QL cung cấp một bộ các tính năng phong phú cho phép bạn truy xuất,
thao tác, chuyển đổi và tạo dữ liệu tài liệu JSON. Các tính năng chính bao gồm:

Câu lệnh SELECT: Câu lệnh SELECT trong N1QL mở rộng chức năng của
câu lệnh SQL SELECT để làm việc với các tài liệu JSON. Bạn có thể sử dụng kiến
thức về SQL để làm việc với các tính năng NoSQL mạnh mẽ của Couchbase, từ đó
cho phép bạn làm việc với dữ liệu lớn, người dùng dữ liệu lớn và điện toán đám
mây.
Ngôn ngữ Thao tác Dữ liệu (DML): N1QL cung cấp các câu lệnh DELETE,
INSERT, UPDATE và UPSERT để tạo, xóa và sửa đổi dữ liệu được lưu trữ trong
tài liệu JSON. Bạn có thể thực hiện các thao tác này bằng cách xác định và thực
hiện các lệnh đơn giản.

Chỉ mục: N1QL cung cấp các câu lệnh CREATE và DROP INDEX để dễ
dàng tạo và xóa các chỉ mục.
Truy cập khóa chính: Dữ liệu trong Couchbase Server có thể được lưu trữ
trong các cặp khóa-giá trị, cung cấp truy cập khoá chính cho bất kỳ dữ liệu nào.

Tổng hợp: N1QL cung cấp các toán tử tổng hợp SQL tiêu chuẩn như MIN,
MAX, COUNT, cũng như các toán tử nhóm, mệnh đề GROUP BY, và bộ lọc
nhóm, HAVING.
Câu lệnh join: N1QL cho phép bạn lấy dữ liệu từ nhiều tài liệu bằng cách
xác định tham gia trong mệnh đề FROM.

Nesting: Nest cho phép bạn lấy các bản ghi phụ cho một bản ghi. Nghĩa là,
đối với mỗi đầu vào trái, đầu vào tay phải kết hợp được thu thập thành một mảng,
sau đó được nhúng trong kết quả. Ví dụ: bạn có thể xếp mỗi mục theo thứ tự của
khách hàng. Các tổ có thể được thực hiện trên nhiều tài liệu.

XXIII
Unnesting: Unnesting là đối lập của nesting. Hàm UNNEST chiết xuất các
bản ghi phụ được lồng từ một bản ghi, làm cho mỗi bản trích xuất một bản ghi
riêng biệt. Lưu ý rằng unnesting có thể được thực hiện trên một tài liệu duy nhất.
Các truy vấn phụ: N1QL hỗ trợ truy vấn nhiều phần thông qua các truy vấn
phụ. Bạn có thể sử dụng một truy vấn phụ với câu lệnh SELECT hoặc làm tổ đó
trong một truy vấn con khác, qua đó tinh chỉnh các kết quả của các truy vấn trước.

Các lệnh UNION, INTERSECT, VÀ EXCEPT: N1QL cung cấp các thao tác
UNION, INTERSECT, và EXCEPT để so sánh hai hoặc nhiều truy vấn. UNION
kết hợp kết quả của hai hoặc nhiều truy vấn vào một bộ kết quả duy nhất bao gồm
tất cả các hàng thuộc về tất cả các truy vấn trong liên minh. EXCEPT trả về bất kỳ
giá trị khác biệt nào từ truy vấn bên trái mà không tìm thấy trên truy vấn đúng.
INTERSECT trả về bất kỳ giá trị khác biệt nào được trả về bởi các truy vấn trên cả
hai mặt của toán hạng INTERSECT.

3.4. Tìm kiếm toàn văn


Couchbase Server thực hiện truy vấn tìm kiếm bằng cách sử dụng Tài liệu
tham khảo Toàn văn bản (Developer Preview), một công cụ tìm kiếm toàn văn tích
hợp. Với Couchbase Full Text Search, bạn, với tư cách là một nhà phát triển, có
thể dễ dàng thêm các khả năng tìm kiếm toàn văn vào ứng dụng của bạn mà không
cần triển khai thêm các thành phần, làm giảm tính phức tạp trong hoạt động. Ngoài
ra, nếu bạn đang sử dụng các công cụ tìm kiếm bên ngoài như Elasticsearch hoặc
Lucidworks, bạn có thể tận dụng kết nối sẵn có để liên tục sao chép dữ liệu từ cụm
máy chủ Couchbase đến các công cụ tìm kiếm.

XXIV
4. Sự khác biệt giữa N1QL và SQL
Sự khác biệt quan trọng nhất giữa SQL truyền thống và N1QL là mô hình
dữ liệu. Sự khác biệt nổi bật khác bao gồm chiếu, lựa chọn và lọc dữ liệu.

4.1. Mô hình dữ liệu


Trong một cơ sở dữ liệu SQL truyền thống, dữ liệu bị ràng buộc vào các
bảng có cấu trúc đồng nhất. Đây là cách một cơ sở dữ liệu nhân viên đơn giản có
thể tìm trong một cơ sở dữ liệu quan hệ. Nó bao gồm hai bảng, Employee and
Employers. Tên là chìa khóa chính.

NHÂN VIÊN
Tên | SSN | Mức lương
-----------------------------------------------------------------------
Jamie | 234 | 123
Steve | 123 | 456
  
LƯỢC ĐỒ:
Tên -> Chiều dài chuỗi 100
SSN -> Chiều dài chuỗi 9
Lương -> Số lượng có chiều dài chuỗi 10

NHÂN VIÊN:
-------------------------------------------------- ---------------------
  Name_Key | Công ty | Bắt đầu | Kết thúc
  Jamie | Yahoo | Năm 2005 | Năm 2006
  Jamie | Oracle | 2006 | Năm 2012
  Jamie | Couchbase | 2012 | VÔ GIÁ TRỊ

XXV
Trong N1QL, dữ liệu tồn tại dưới dạng các tài liệu dạng tự do, được thu thập
dưới dạng bộ sưu tập lớn được gọi là các khoảng khóa. Không có sự đồng nhất và
không có khoảng cách hợp lý của các đối tượng có cùng một hình dạng dữ liệu
trong không gian khóa. Đây là cách dữ liệu trong ví dụ trên trông trong N1QL:

(HRData keyspace)
{ 'Name': 'Jamie'
'SSN': 234
'Wage': 123
'History': [ ['Yahoo', 2005, 2006], ['Oracle', 2006, 2012], ]
},

{
'Name': Steve
'SSN': 123,
'Wage': 456,
}

4.2. Chiếu dữ liệu


Khi bạn chạy một truy vấn trong SQL, một tập các hàng bao gồm một hoặc
nhiều cột được trả về. Một tiêu đề có thể được lấy ra để có được siêu dữ liệu về
mỗi cột. Trong một hệ cơ sở dữ liệu quan hệ, không thể có được một tập kết quả,
trong đó mỗi hàng có một bộ các cột khác nhau.

Truy vấn:
SELECT Name, Company
FROM Employee, Employers
WHERE Name_Key = Name

XXVI
Kết quả:
Name | Company
----------------
Jamie | Oracle
Jamie | Yahoo
Jamie | Couchbase
----------------
Giống như SQL, bạn có thể đổi tên các trường trong N1QL bằng cách sử
dụng từ khoá AS. Ngoài ra, bạn có thể định hình lại các dữ liệu trong N1QL, mà
không có tương tự trong SQL. Điều này được thực hiện bằng cách nhúng các
thuộc tính của câu lệnh trong đối tượng kết quả mong muốn.

Truy vấn:
SELECT Name, History, {'FullTime': true} AS 'Status'
FROM HRData
Kết quả:
{
'Name': 'Jamie',
'History':
[
['Yahoo', 2005, 2006],
['Oracle', 2006, 2012],
['Couchbase', 2012, null]
],
'Status': { 'FullTime': true }
}
{
'Name': 'Steve',
'Status': { 'FullTime': true }
}
XXVII
4.3. Lựa chọn dữ liệu
Trong N1QL, mệnh đề FROM được sử dụng để chọn giữa các nguồn dữ liệu
(keyspaces). Nếu HRData là một không gian khóa, câu lệnh sau đây sẽ chọn thuộc
tính Name từ tất cả các tài liệu trong không gian khóa HRData có thuộc tính Tên
được định nghĩa.
Khi sử dụng N1QL, mỗi tài liệu cũng có thể coi mình như một nguồn dữ
liệu và chạy truy vấn qua các phần tử lồng nhau của nó. Các phần tử lồng nhau
được sử dụng toán tử dấu chấm (.) Để hạ xuống mức và toán tử khung vuông ([])
để chỉ vào một phần tử mảng.
Các trường đã chọn cũng có thể được đổi tên bằng toán tử AS, giống như
trong SQL:
SELECT firstjob FROM HRData.History[0] AS firstjob
{
'firstjob': ['Yahoo', 2005, 2006]
}

SELECT firstjob[2] FROM HRData.History[0] AS firstjob


{
'firstjob[2]': 2006
}

4.4. Lọc dữ liệu


N1QL hỗ trợ mệnh đề WHERE, nhưng với một số khác biệt nhỏ.
Tương tự như SQL, dấu chấm (.) Và toán tử khung vuông ([]) có thể được
sử dụng để truy cập các phần tử lồng nhau vì chúng được sử dụng trong mệnh đề
SELECT.
Dữ liệu N1QL có thể có hình dạng không đều và do đó các giá trị không xác
định được công nhận là khác biệt với null. N1QL cung cấp một bộ các toán tử bổ
sung như IS MISSING ngoài các toán tử chuẩn như IS NULL. Các chuyển đổi

XXVIII
mới, ví dụ từ các giá trị số nguyên khác 0 thành giá trị Boolean đúng, cũng được
hỗ trợ.
Hầu hết các hàm SQL tiêu chuẩn (ví dụ LOWER ()) đều được định nghĩa.
Ngoài các vị từ lọc chuẩn, N1QL cung cấp các toán tử mới để làm việc với các
mảng trong các tài liệu: ANY, SOME, and EVERY. ANY and SOME đánh giá một
điều kiện cho mỗi phần tử, và trả về true nếu bất kỳ phần tử nào đáp ứng điều kiện.
EVERY cũng đánh giá một điều kiện cho mỗi phần tử, ngoại trừ nó trả về true chỉ
khi tất cả các phần tử khớp với điều kiện.

5. Lập chỉ mục


Couchbase Server tăng tốc độ truy cập dữ liệu với các chỉ mục. Việc lập chỉ
mục đặc biệt quan trọng bởi vì các sản phẩm trong các nhóm Couchbase sản xuất
được phân phối qua nhiều nút và bất kỳ mục nào cũng cần phải được truy cập để
đáp ứng một truy vấn.
Couchbase hỗ trợ một loạt các chỉ số thứ cấp toàn cục và các chỉ số dựa trên
chỉ số xem có thể được sử dụng để cải thiện hiệu suất với chi phí của một số phí
xử lý để duy trì chỉ mục. Do dữ liệu chỉ mục nhỏ hơn tài liệu nên thường có thể
giữ toàn bộ chỉ mục trên một nút chứ không phải phân phối chỉ mục trên nhiều nút.
Thực hiện điều này có thể làm truy vấn đến nút hoạt động truy cập cục bộ, giảm
thời gian truy cập mạng. Couchbase cung cấp lệnh EXPLAIN cho phép tìm kiếm
chi tiết về thực hiện truy vấn và sử dụng chỉ mục có thể giúp hướng dẫn các quyết
định về chỉ mục. Couchbase sử dụng nhiều chiến lược thông minh như xây dựng
chỉ mục trì hoãn (tạo ra nhiều chỉ mục với một lần quét) và các thiết lập thống nhất
chỉ số linh hoạt để kiểm soát tính mệt mỏi.
Mặc dù tên của họ, chỉ số thứ cấp toàn cục (GSI) có thể được sử dụng để tạo
các chỉ mục chính hoặc thứ cấp hiệu suất cao. Chỉ số thứ cấp toàn cầu Couchbase
được phân chia riêng biệt với dữ liệu. Mặc dù dữ liệu Couchbase được phân phối
giữa các nút, nhưng các nhà phát triển và quản trị viên hiệu suất tốt nhất thường
tạo ra các chỉ mục trên một tập hợp các nút được chọn chạy dịch vụ chỉ mục. Giữ
toàn bộ chỉ mục trên một nút có nghĩa là sự phức tạp trong hoạt động vẫn không
XXIX
đổi khi cluster phát triển và trong trường hợp chỉ số bao trùm được sử dụng, nó
cũng đảm bảo rằng các yêu cầu về chỉ mục có thể được thỏa mãn bằng cách sử
dụng dữ liệu cục bộ mà không có độ trễ mạng.
Composite Indexes tối ưu hóa truy cập cho các truy vấn yêu cầu dữ liệu từ
nhiều thuộc tính.
Các chỉ mục hỗ trợ bao gồm tất cả các thông tin cần thiết để đáp ứng một
truy vấn mà không cần truy cập vào dữ liệu, vì vậy chúng rất nhanh.
Các chỉ mục lọc (hoặc các chỉ mục phần) thực hiện lọc cho phép người dùng
tạo một chỉ mục trên một tập con của dữ liệu bằng cách sử dụng mệnh đề
WHERE. Điều này có ảnh hưởng đến việc giảm kích thước chỉ mục và các tác
động bảo trì liên quan để duy trì khả năng mở rộng và hiệu suất khi xử lý các tập
dữ liệu lớn.
Các chỉ mục dựa trên chức năng là kết quả của sự tính toán giá trị của một
biểu thức trên một loạt tài liệu.
Chỉ mục tài liệu phụ được sử dụng để chỉ các cấu trúc nhúng và các đối
tượng phức tạp. Các chỉ mục tài liệu phụ có thể cải thiện đáng kể hiệu suất truy
vấn đối với các đối tượng JSON tuần tự.
Khung nhìn MapReduce gia tăng thường được sử dụng làm chỉ mục. Khi
xây dựng một giao diện MapReduce, một nhà phát triển có thể tùy chỉnh nó để tối
ưu hóa hỗ trợ cho một bộ truy vấn cụ thể, thường là các truy vấn phức tạp thực
hiện phân loại và tập hợp để hỗ trợ phân tích thời gian thực qua các bộ dữ liệu rất
lớn. Ví dụ: một chỉ mục xem MapReduce sẽ hữu ích trong việc xây dựng báo cáo
tương tác về dữ liệu bán hàng có thể được khám phá theo ngày tháng, mục hoặc
khu vực. Bạn có thể tạo chỉ mục một chỉ mục MapReduce bằng cách phát các hàng
riêng biệt, đồng thời tập hợp dữ liệu bán hàng theo từng không gian riêng biệt.
Các chế độ xem không gian tăng tốc độ truy cập vào dữ liệu số nhiều chiều
và được tạo ra bằng cách sử dụng Bản đồ không gian (Spatial MapReduce). Chỉ số
không gian là một cây R, một cấu trúc có thể đại diện cho nhiều vùng có khả năng
chồng chéo nhau. Thông tin về hình học được hỗ trợ sử dụng đặc tả GeoJSON.

XXX
Các chế độ xem không gian cũng có thể được tạo trên dữ liệu số để xác định
khối hình đa chiều (hyper-cube), chẳng hạn như mối quan hệ lứa tuổi của khách
hàng, thu nhập và chi tiêu suốt đời. Lợi thế của chế độ xem không gian so với chỉ
mục hợp chất là chế độ xem không gian có thể phục vụ các truy vấn có kích thước
theo thứ tự bất kỳ.
Các chỉ mục văn bản đầy đủ cho phép các nhà phát triển dễ dàng thêm các
khả năng tìm kiếm toàn văn vào ứng dụng của họ bằng cách sử dụng CBFT (xem
trước của nhà phát triển), các trường hợp sử dụng tìm kiếm mà không cần triển
khai các thành phần bổ sung, làm giảm tính phức tạp của hoạt động.

6. Quản lý dữ liệu
Couchbase Server cung cấp các dịch vụ quản lý dữ liệu thông qua trình quản
lý dữ liệu.

6.1. Thuộc tính nguyên tử


Máy chủ Couchbase cung cấp tính nguyên tử ở cấp tài liệu. Viết tài liệu sẽ
rõ ràng hoặc thất bại. Các giao dịch chéo tài liệu thông thường có thể tránh được
bằng cách hợp nhất các thông tin thường xuyên truy cập vào một tài liệu, hoặc sử
dụng các kỹ thuật khác.

6.2. Tính nhất quán và độ bền


Khi nói về Định lý CAP, các hệ thống quản lý dữ liệu phân tán thường được
coi là CP hoặc AP, nghĩa là, các nhà đánh giá tập trung vào sự cân bằng trong tính
nhất quán (C) hoặc tính khả dụng (A). Điều quan trọng là phải hiểu rằng định lý
CAP chỉ có liên quan đến việc mô tả cách thức một hệ thống hoạt động trong suốt
một phân vùng mạng và cách nó khôi phục sau đó; khi một hệ thống hoạt động
bình thường, không cần tắt.
Couchbase Server hoạt động như một hệ thống CP trong cấu hình mặc định
của nó và chạy như một cụm duy nhất. Điều này là bởi vì bất kỳ quyền truy cập
vào một khoá nào đó (đọc, ghi, cập nhật, xoá) luôn được chuyển hướng tới nút lưu
XXXI
trữ dữ liệu đang hoạt động tại thời điểm đó. Thư viện khách hàng ứng dụng phân
phối minh bạch các yêu cầu đến các nút thích hợp và do đó mọi máy chủ ứng dụng
/ thread sẽ ngay lập tức đọc các ghi của bất kỳ máy chủ ứng dụng khác / thread.
Bất kỳ bản ghi nào cũng được sao chép trong cluster, nhưng các bản sao này chủ
yếu nhằm mục đích có tính sẵn sàng cao và theo mặc định không cung cấp bất kỳ
lưu lượng truy cập nào cho đến khi được kích hoạt.
Theo Định lý CAP, một phân vùng mạng không thể phân biệt được với sự
thất bại của một phần của hệ thống. Với Couchbase, trong trường hợp thất bại của
một nút, một số dữ liệu sẽ tạm thời không khả dụng cho việc viết cho đến khi nó
được kích hoạt ở bất cứ đâu trong cluster bằng thủ công hoặc tự động. Đọc, tuy
nhiên, có thể tiếp tục được phục vụ bởi các bản sao bản sao của dữ liệu ở nơi khác
trong cluster.
Nếu một nút đơn không thành công, dữ liệu trên một nút không thành công
sẽ không chấp nhận ghi cho đến khi nút đó thành công, mặc dù có thể đọc được từ
các bản sao nếu cần.
Couchbase Server cho phép người dùng tăng tính khả dụng bằng cách sao
chép dữ liệu giữa nhiều nhóm Couchbase Server đang chạy trong cùng một hoặc
các trung tâm dữ liệu riêng biệt bằng cách sử dụng một khả năng được gọi là sao
chép trung gian dữ liệu (XDCR, mô tả sau). Với XDCR, trạng thái thông tin trên
cả hai cụm sẽ dần dần được làm phù hợp, và trong thời gian chờ đợi Couchbase
vẫn còn có sẵn để đọc và ghi lưu lượng truy cập.
Couchbase Lite làm tăng thêm tính sẵn sàng trong các kịch bản điện thoại di
động và IOT. Nó thực hiện việc này bằng cách bảo vệ các thay đổi cục bộ trên
thiết bị khi người dùng tương tác với ứng dụng như bình thường và sau đó quản lý
đồng bộ hóa với Couchbase Server khi kết nối mạng được khôi phục.
Couchbase Server hoạt động như thế nào và phục hồi từ các điều kiện thất
bại khác nhau vượt quá phạm vi của bài báo này, đặc biệt là với các tùy chọn cấu
hình và lập trình khác nhau.

XXXII
6.3. Sự nhất quán của chỉ mục và bản sao
Theo mặc định, chỉ mục và bản sao được cập nhật không đồng bộ để có hiệu
suất tốt nhất. Trên cơ sở mỗi lần viết hoặc mỗi truy vấn, một ứng dụng có thể chọn
để giảm thiểu một số hiệu suất để ưu tiên độ tin cậy (đối với bản sao) hoặc tính
nhất quán (đối với truy vấn). RDBMs truyền thống và cơ sở dữ liệu NoSQL ghi
chậm để giữ cho các chỉ mục và bản sao được cập nhật. Couchbase theo thiết kế
cho phép nhà phát triển ứng dụng tạo ra sự cân bằng thông báo tùy thuộc vào điều
gì là quan trọng nhất đối với phần đó của ứng dụng.
Các chỉ số Couchbase được xây dựng từng bước, do đó, sau khi Couchbase
Server xây dựng ban đầu có thể phản hồi ngay lập tức cho một yêu cầu, hoặc có
thể được thực hiện để bắt kịp thời điểm khi truy vấn được phát hành. Nhà phát
triển có thể chọn độ tươi của dữ liệu chỉ mục tại thời điểm truy vấn bằng cách đặt
thuộc tính "cũ". Điều này cung cấp mức độ cấu hình cao, từ yêu cầu Couchbase
Server xử lý tất cả các bản cập nhật trước khi đưa ra phản hồi để cho phép
Couchbase Server ngay lập tức đáp ứng yêu cầu sử dụng trạng thái hiện tại của chỉ
mục tại thời điểm truy vấn hoặc ở giữa. Phạm vi các tùy chọn cho phép ứng dụng
càng nhanh càng tốt trừ khi có yêu cầu khó khăn để có được thông tin mới nhất
trong chỉ mục.

6.4. Tunable Durability Requirements


Theo mặc định, không đồng bộ và trình quản lý dữ liệu sẽ gửi một thông
điệp xác nhận (ACK) tới một máy khách ngay khi bản cập nhật nằm trong RAM.
Khi một ghi trong bộ nhớ, người quản lý dữ liệu ngay lập tức thêm nó vào các bản
sao, đĩa, và lập chỉ mục. Nhân rộng là dựa trên RAM, vì vậy nó là cực kỳ nhanh.
Để tăng khả năng chịu lỗi với chi phí tăng độ trễ, Couchbase chỉ có thể thừa nhận
sự thay đổi đối với ứng dụng chỉ sau khi bản cập nhật cũng được sao chép, tiếp tục
lưu trữ trên đĩa hoặc cả hai. Dữ liệu được nhân lên đến 1, 2, hoặc 3 nút và lưu vào
đĩa cho tổng cộng lên đến bốn bản sao, bất kể tin nhắn ACK được giữ lên cho
những hoạt động đó.

XXXIII
XXXIV
6.5. Truy cập đồng thời
Trong một hệ thống quản lý dữ liệu phân tán đang làm việc với khối lượng
cao, xung đột có thể xảy ra với nhiều khách hàng cố gắng ghi cùng một tài liệu
cùng một lúc. Tất cả các hoạt động Couchbase Server là nguyên tử ở cấp tài liệu.
Couchbase Server cung cấp cả khóa khách quan và chủ quan để ngăn chặn lỗi
đồng thời.
Khóa khách quan được dựa trên Giá trị So sánh (CAS), một số nhận dạng
gia tăng duy nhất và nguyên tử là một phần của siêu dữ liệu của mọi tài liệu. Một
số thao tác cập nhật đòi hỏi phải kiểm tra giá trị CAS thành công để thành công.
Ứng dụng vượt qua giá trị CAS như một tham số. Couchbase Server sau đó kiểm
tra giá trị CAS đã không thay đổi trước khi một tài liệu bị xóa hoặc sửa đổi để có
hiệu quả ngăn ngừa xung đột mà không cần phải khóa hồ sơ. Đây là phương pháp
tốt nhất được ưa thích, phương pháp xử lý đồng thời với Couchbase.
Couchbase Server cũng hỗ trợ khóa chủ quan (tương tự như semaphores
trong một ứng dụng), ít được sử dụng. Khóa bi quan sẽ được tự động phát hành để
ngăn chặn các deadlock không thể phục hồi được.

6.6. Tài liệu hết hạn


Các lập trình viên có thể sử dụng Time to Live (TTL) để đặt thời gian hết
hạn cho một tài liệu. Điều này thường được sử dụng với dữ liệu tạm thời như các
phiên người dùng. Khi đặt giá trị tùy chọn này, Couchbase Server sẽ xóa các giá trị
trong quá trình bảo trì định kỳ nếu TTL cho một mục đã hết hạn. Tài liệu cũng có
thể được sửa, cập nhật thời gian hết hạn của chúng mà không sửa đổi nội dung của
chúng. Theo mặc định tài liệu không có TTLs và không hết hạn. TTL là một trong
những cơ chế cho phép Couchbase Server quản lý khả năng của riêng mình.

XXXV
Chương 3: Bảo mật trong Coachbase

1. Tổng quan
Để truy cập vào Couchbase Server, quản trị viên và các ứng dụng phải được
xác thực. Xác thực là một quá trình để xác định một người sử dụng đang cố gắng
truy cập vào một hệ thống.

2. Chứng thực bằng chứng chỉ


Với mối đe dọa ngày càng tăng về bảo mật từ những người dùng giả mạo và
/ hoặc máy móc, xác thực dựa trên mật khẩu không còn là phương pháp xác thực
đáng tin cậy cho người dùng nữa. Couchbase hiện hỗ trợ việc sử dụng các chứng
chỉ x.509 để xác thực các máy khách nhằm đảm bảo rằng chỉ những người dùng
được phê duyệt (máy móc hoặc thiết bị đầu cuối) mới được chứng thực. Lưu ý
rằng cơ chế xác thực này chỉ có sẵn cho dịch vụ dữ liệu.
Xác thực dựa trên chứng chỉ cung cấp thêm một lớp bảo mật. Nó dựa vào
một cơ quan chứng nhận, CA, để xác nhận tính xác thực và cấp giấy chứng nhận.
Chứng chỉ bao gồm các thông tin như tên của tổ chức mà nó xác định, ngày hết
hạn, tên của CA đã cấp chứng chỉ, chữ ký số của CA đang phát hành, v.v. Thông
tin này phục vụ như một lời giới thiệu cho những người dùng biết và tin cậy CA
nhưng không biết thực thể được nhận dạng bởi chứng chỉ. Tất cả các phần mềm hỗ
trợ chứng chỉ đều duy trì một bộ sưu tập các chứng chỉ CA đáng tin cậy giúp họ
xác định những tổ chức phát hành chứng chỉ nào có thể tin cậy. Trong trường hợp
CA là một phần của hệ thống phân cấp, phần mềm có thể xác minh rằng chứng chỉ
được ký bởi cùng một CA gốc.

XXXVI
2.1. Điều kiện chứng thực
Giấy chứng nhận x.509 là tiêu chuẩn chính thức cho chứng chỉ khoá công
khai và SSL / TLS dựa vào tiêu chuẩn này. Bạn phải sử dụng các chứng chỉ x.509
hợp lệ được tạo và ký bởi cùng một cơ quan chứng nhận gốc (CA). Chứng chỉ
x.509 phải ở định dạng PEM.

2.2. Bật tính năng xác thực dựa trên chứng chỉ x.509 trên máy chủ
Bạn có thể bật xác thực dựa trên chứng chỉ trên máy chủ bằng cách sử dụng
REST API hoặc CLI.
Cơ chế xác thực này chỉ có sẵn cho dịch vụ dữ liệu và cũng có thể được sử
dụng với SDK / clients. Đối với truy vấn và các dịch vụ khác, hãy sử dụng các cơ
chế xác thực được hỗ trợ khác.

2.2.1. Using REST API


Enable x.509 certificate authentication on the server. You must set this
parameter once per cluster.
curl -X POST --data-binary "state=enable"
http://Administrator:password@localhost:8091/settings/clientCertAuth

Chỉ định đường dẫn của chứng chỉ để sử dụng để phân tích cú pháp cho
người dùng trên máy chủ.
curl -X POST --data-binary "path=subject.cn"
http://Administrator:password@localhost:8091/settings/clientCertAuth

Chỉ định tiền tố và dấu phân cách trong biểu thức đường dẫn đó.
curl -X POST --data-binary "delimiter="
http://Administrator:password@localhost:8091/settings/clientCertAuth curl -X
POST --data-binary "prefix="
http://Administrator:password@localhost:8091/settings/clientCertAuth

XXXVII
2.2.2. Sử dụng CLI
Sử dụng lệnh couchbase-cli sau:
couchbase-cli ssl-manage <options>

Options Value Description

--set- disable | enable | Enable or disable the SSL client


client- mandatory certificate authentication.
auth-state disable: Disables client based
certificate authentication. This is the
default value.
enable: When enabled, if the client
presents a certificate, then that
certificate is used to authenticate. If
authentication fails, then access is
denied. However, if the client does not
present a certificate, the certificate
based authentication will be bypassed.
mandatory: The client must present a
valid certificate in order to gain access
to Couchbase buckets. If using
XDCR, do not use the mandatory state
for X.509 Certificate Authentication.

--set- subject.cn | san.uri | Set SSL client certificate type value.


client- san.dnsname | san.name
auth-path

--set- set_client_auth_prefix Set SSL client certificate prefix value.


client-
auth-
prefix
XXXVIII
Options Value Description

--set- set_client_auth_delimiter Set SSL client certificate delimiter


client- value.
auth-
delimiter

--client-   Show SSL client certificate


auth authentication value.

Sau khi thiết lập phía máy chủ để xác thực khách hàng, bạn cũng nên chỉ
định người dùng cho một số vai trò ở phía máy chủ. Làm như sau:
Tạo người dùng có nguồn xác thực (miền) 'Couchbase'.
Đảm bảo rằng người dùng này là người dùng được quản lý nội bộ với mật
khẩu mạnh. Mặc dù mật khẩu không được sử dụng như là một phần của xác thực
dựa trên chứng chỉ, nó là cần thiết nếu người dùng đang cố gắng truy cập các tài
nguyên thông qua web console.

3. Xác thực bằng mật khẩu


Để truy cập Couchbase Server, quản trị viên và ứng dụng phải xác thực. Xác
thực dựa trên mật khẩu. Để bảo mật thêm, các ứng dụng có thể được thiết kế để sử
dụng mật khẩu trong thói quen dựa trên băm.

3.1. Xác thực cho Quản trị viên


Tên người dùng và mật khẩu quản trị viên, cả hai đều được yêu cầu để xác
thực, ban đầu được thiết lập trong quá trình khởi tạo Couchbase Server: xem Khởi
tạo Cluster để biết chi tiết. Sau đó, mật khẩu có thể được thay đổi bằng công cụ đặt
lại mật khẩu, reset-admin-password.
Cách làm tốt nhất về xác định mật khẩu được liệt kê trong phần Couchbase
passwords.

XXXIX
Khi Bảng điều khiển Web Couchbase đang chạy trên cổng mặc định, http: //
localhost: 8091, tên người dùng và mật khẩu của quản trị viên được truyền trong rõ
ràng, từ trình duyệt của quản trị viên đến giao diện điều khiển. Tùy chọn,
Couchbase Web Console có thể được cấu hình để truy cập an toàn, tại https: //
localhost: 18091; để tên người dùng và mật khẩu được thông qua ở dạng mã hóa.

3.2. Xác thực cho các ứng dụng


Các tính năng của Couchbase Server - bao gồm dữ liệu, cài đặt và thống kê -
chỉ có thể được truy cập bởi những người dùng đã được gán đặc quyền thích hợp.
Mỗi privilage là đọc hoặc đọc-viết. Các đặc quyền được chỉ định bởi các Quản trị
viên Toàn quyền, dưới dạng vai trò. Khi người dùng xác thực thành công, các vai
trò được phân công của họ sẽ được kiểm tra và Couchbase Server đã cấp hoặc từ
chối.
Để vượt qua các chứng chỉ, các ứng dụng phải sử dụng một trong bốn cơ
chế được cung cấp bởi khung cơ cấu chứng thực và bảo mật đơn giản (SASL). Đây
là PLAIN, và ba thành viên của Cơ chế xác thực phản ứng Salted Challenge của
các hàm băm; đó là SCRAM-SHA1, SCRAM-SHA256 và SCRAM-SHA512. Cơ
chế SCRAM cho phép các ứng dụng xác thực một cách an toàn, bằng cách truyền
mật khẩu chỉ ở dạng được bảo vệ. Trình điều khiển có thể cần được cập nhật, để
hỗ trợ chức năng băm dựa trên SHA.

3.3. Cơ chế xác thực mật khẩu


Theo thứ tự tăng dần, Couchbase cơ chế xác thực mật khẩu như sau:
Khách hàng gửi mật khẩu ở dạng không mã hoá. Tất cả các khách hàng đều
ủng hộ phương pháp xác thực này. Nó không an toàn, không có biện pháp phòng
vệ nào chống lại mật khẩu bị đánh cắp khi chuyển.

XL
SCRAM-SHA1: Sử dụng một phím 160-bit.
SCRAM-SHA256: Một trong những nhóm hàm băm được gọi là SHA2,
SCRAM-SHA256 sử dụng một khóa 256-bit.
SCRAM-SHA512: Một hàm băm khác từ nhóm SHA2, SCRAM-SHA512
sử dụng một phím 512-bit; và là giao thức xác thực mạnh nhất được hỗ trợ.
Trong quá trình đàm phán máy chủ khách hàng ban đầu, giao thức xác thực
mạnh nhất được hỗ trợ bởi cả Couchbase Server và hệ điều hành khách hàng của
ứng dụng được chọn để sử dụng. Ví dụ, nếu khách hàng chỉ hỗ trợ giao thức
PLAIN, giao thức PLAIN được sử dụng; nhưng nếu máy khách cũng hỗ trợ giao
thức SCRAM-SHA1, thì SCRAM-SHA1 được sử dụng.
Một phương pháp đáp ứng thách thức có thể được truyền qua cả hai kênh
mã hóa và không được mã hóa.

Lưu ý rằng các giao thức phản ứng thách thức SCRAM chỉ xác thực quá
trình xác nhận mật khẩu. Để đảm bảo cho phiên tiếp theo, nên sử dụng TLS.

4. Ủy quyền
Để ủy quyền cho người dùng, Couchbase Server cung cấp Kiểm soát Truy
cập dựa trên vai trò.

4.1. RBAC dành cho Quản trị viên


Kiểm soát truy cập dựa vào vai trò (Role-Based Access Control - RBAC)
dành cho các quản trị viên được thiết kế để quản lý truy cập quản trị vào hệ thống
Couchbase và để phân chia các nhiệm vụ hành chính. Với RBAC, mỗi quản trị
viên chỉ có thể thực hiện một bộ hoạt động cố định được xác định rõ ràng dựa trên
bản mô tả công việc.
RBAC có thể được cấu hình cho người dùng nội bộ hoặc bên ngoài, và một
người dùng có thể được ánh xạ bởi Người quản trị toàn quyền vào một hoặc nhiều
vai trò hành chính cố định. Các vai trò này chứa một bộ các nhiệm vụ được xác

XLI
định có thể được thực hiện trong hệ thống: người dùng không có quyền truy cập
quản trị khác, trừ một người được xác định trong vai trò của họ.
Quản trị viên đầy đủ trong Couchbase có thể quản lý vai trò người dùng
bằng cách sử dụng các công cụ Couchbase CLI (như được mô tả trong quản trị-
role-role) hoặc REST API (như được mô tả trong RBAC).

4.2. RBAC cho các ứng dụng


Dựa trên mô hình bảo mật truy cập dựa trên vai trò (RBAC) được giới thiệu
trong phần 4.5 dành cho các quản trị viên, Couchbase Server 5.0 bổ sung RBAC
cho các ứng dụng; để bạn có thể kiểm soát ở cả cấp độ rộng và chi tiết, những gì
người dùng cuối và các dịch vụ ứng dụng có thể làm. Vì vậy, bạn có thể hạn chế
truy cập vào các thông tin mà họ cần, không có gì nhiều hơn hoặc ít hơn, và đáp
ứng yêu cầu tuân thủ.

4.3. Quản lý người dùng RBAC


Couchbase RBAC cho phép người dùng được định nghĩa được gán các vai
trò, cho phép truy cập vào tài nguyên.

4.4. Tài nguyên Dưới Điều khiển Truy cập


Máy chủ Couchbase áp dụng RBAC cho một bộ tài nguyên xác định. Quản
trị viên Couchbase toàn bộ có thể gán một vai trò cho người dùng được xác định;
vai trò được kết hợp với một trong những đặc quyền nhiều hơn hoặc trên một cá
nhân, tên tài nguyên; hoặc trên tất cả các nguồn lực trong một nhóm loại tài
nguyên.

4.5. Nâng cấp lên RBAC


Couchbase cung cấp một đường nâng cấp, nhờ đó người dùng có thể chuyển
tiếp các hoạt động của họ từ Couchbase Server 4.6 trở về trước (tất cả các phiên
bản trước RBAC) đến 5.0 (đây là bản phát hành RBAC).

XLII
XLIII
5. Kiểm tra
Các hành động thực hiện trên Couchbase Server có thể được kiểm tra. Điều
này cho phép một quản trị viên đầy đủ để đảm bảo rằng các nhiệm vụ quản lý hệ
thống đang được thực hiện một cách thích hợp. Điều này có thể tạo điều kiện cho
việc tuân thủ các tiêu chuẩn quy định.

5.1. Các sự kiện kiểm tra


Couchbase Server cung cấp sự kiện kiểm tra, gửi số liệu tương ứng đến các
tập tin đích.

5.1.1. Danh sách các sự kiện Kiểm toán


Sự kiện được kiểm tra bởi Couchbase Server bao gồm đăng nhập thành công
và thất bại, các sự kiện liên quan đến cấu hình cụm và nhóm, và việc sử dụng các
công cụ yêu cầu quyền quản trị. Thông tin tương ứng được ghi lại trong các mục
tiêu đầu ra, là các tệp ở định dạng JSON.
Couchbase Server tạo ra sự kiện kiểm tra bất cứ khi nào xảy ra các hành
động sau:

Table 1. Administrative Audit Events

Login succeeded or failed Audit configuration Auditing enabled or


changed disabled

Node added to cluster Node removed from Node failed over


cluster

Cluster rebalanced System started or shut Bucket created


down

Bucket deleted Bucket flushed Bucket-settings modified

Disk or index path Remote cluster- Remote cluster-reference


changed reference established updated

XLIV
Remote cluster-reference User added User removed
deleted

XDCR reference created XDCR reference XDCR reference deleted


updated

XDCR replication paused XDCR replication- XDCR replication


or resumed settings updated created

XDCR replication Auto failover enabled Auto failover disabled


canceled

Auto failover-count reset Cluster alerts enabled Cluster alerts disabled

Index-node added or Server-group created Node added to server-


removed group

Node removed from Server-group deleted Password changed or


server-group reset

FTS index created or FTS index deleted FTS index control-


updated command issued

FTS configuration FTS configuration GC run triggered


refreshed replanned

CPU profiling started Memory profiling Self-signed SSL


started certificate regenerated

LDAP authentication- Encryption key-rotation Compaction settings


settings modified requested modified

5.2. Các đối tượng cần kiểm tra


Đối tượng của một cuộc kiểm tra Couchbase Server là một tệp JSON; sau
khoảng thời gian được định cấu hình và đường dẫn vị trí có thể định cấu hình
được. Phần này cung cấp một số ví dụ về nội dung xuất hiện.

5.2.1. Log của các đối tượng cần kiểm tra


XLV
Sự kiện kiểm tra được ghi lại trong các tệp JSON. Một tập tin mặc định,
được gọi là audit.log luôn sẵn có; và các sự kiện đăng nhập được ghi vào tập tin
này. Sau khoảng thời gian được quản trị viên xác định - tối thiểu là 15 phút và tối
đa là 7 ngày - tệp mặc định được lưu dưới tên được sửa đổi, có dấu thời gian tương
ứng với thời gian lưu. Một tệp audit.log trống và mới được lưu lại, và các sự kiện
đăng nhập vẫn tiếp tục được ghi vào tệp mới này. (Lưu ý rằng việc di chuột qua có
thể xảy ra sớm hơn nếu tệp đạt đến kích thước tối đa là 20MB). Để biết hướng dẫn
về cách định thời gian xoay vòng của tệp, hãy xem mục kiểm tra.

5.2.2. Đăng nhập


Một bản kiểm toán cho một đăng nhập thành công có thể xuất hiện như sau:

{ "timestamp":"2015-02-20T08:48:49.408-08:00", "id":8192, "name":"login


success", "description":"Successful login to couchbase cluster", "role":"admin",
"real_userid": { "source":"ns_server", "user":"bjones" },
"sessionid":"0fd0b5305d1561ca2b10f9d795819b2e", "remote":{"ip":"172.23.107.165",
"port":59383} }

Trong ví dụ này, một người dùng có tên bjones đã đăng nhập thành công
vào một cụm Couchbase bằng cách sử dụng địa chỉ IP của miền 172.23.107.165.

XLVI
5.2.3. Đăng nhập thất bại
Biểu ghi kiểm toán sau đây chỉ ra rằng nỗ lực đăng nhập thất bại:

{ "real_userid": { "source": "rejected", "user": "auditBucketUser" }, "remote":


{ "ip": "127.0.0.1", "port": 64416 }, "timestamp": "2017-03-16T15:45:27.420Z",
"id": 8193, "name": "login failure", "description": "Unsuccessful attempt to
login to couchbase cluster" }

Bản ghi này chỉ ra rằng người dùng tên auditBucketUser đã có một nỗ lực
không thành công để đăng nhập vào nhóm couchbase vào năm 2017-03-16 lúc
15:45:27.

5.2.4. Tạo thùng


Biểu ghi kiểm toán dưới đây tương ứng với việc tạo ra một bucket.
{
"props":
{ "storage_mode": "couchstore", "conflict_resolution_type": "seqno",
"eviction_policy": "value_only", "num_threads": 3, "flush_enabled":
false, "purge_interval": "undefined", "auth_type": "sasl", "ram_quota":
1156579328, "replica_index": false, "num_replicas": 1 }, "type":
"membase", "bucket_name": "auditBucket", "real_userid": { "source":
"ns_server", "user": "Administrator" },
"sessionid": "dca284b5efe1937a1a4085ef88c2fbcb",
"remote":
{ "ip": "127.0.0.1", "port": 64477 },
"timestamp": "2017-03-16T15:43:35.187Z",
"id": 8201,
"name": "create bucket",
"description": "Bucket was created"
}

Bản ghi này cho thấy một bucket được tạo ra vào năm 2017-03-16 lúc
15:43:35; rằng bucket được đặt tên auditBucket; rằng nó được tạo ra với yêu cầu
truy cập xác thực sasl, và chính sách thu hồi của nó được định nghĩa là value_only,
được tạo bởi Quản trị viên toàn hệ thống của hệ thống.

XLVII
5.2.5. Tạo người dùng
Biểu ghi kiểm tra dưới đây tương ứng với việc tạo ra một người dùng.

{ "roles": [ "ro_admin" ], "identity": { "source": "builtin", "user":


"auditBucketUser2" }, "real_userid": { "source": "ns_server", "user":
"Administrator" }, "sessionid": "dca284b5efe1937a1a4085ef88c2fbcb", "remote": {
"ip": "127.0.0.1", "port": 64416 }, "timestamp": "2017-03-16T15:44:32.254Z",
"id": 8232, "name": "set user", "description": "User was added or updated" }

Bản ghi này chỉ ra rằng một người dùng tên auditBucketUser2 đã được tạo
ra bởi Quản trị viên đầy đủ vào 2017-03-16 lúc 15:44:32; và rằng người dùng đã
được trao vai trò của ro_admin.

5.2.6. Tạo chỉ mục


Biểu ghi kiểm toán sau đây chỉ ra rằng một chỉ mục đã được tạo hoặc cập
nhật:
{ "timestamp": "2017-03-16T16:12:36.198Z", "real_userid": { "source":
"ns_server", "user": "Administrator" }, "index_name": "def-airportname", "id":
24577, "name": "Create/Update index", "description": "FTS index was
created/Updated" }

Bản ghi này chỉ ra rằng một chỉ mục FTS có tên def-airportname đã được
tạo hoặc cập nhật vào 201703-16 vào lúc 16:12:36.

6. Mã hóa
Couchbase sử dụng mã hóa để bảo vệ dữ liệu, trong toàn hệ thống.
Mã hóa dữ liệu được sử dụng để ngăn chặn truy cập vào dữ liệu nhạy cảm.
Couchbase Server hỗ trợ mã hóa dữ liệu đang ngừng hoạt động (trên đĩa), trên dây,
và được giữ bởi các ứng dụng. Ngoài ra, nó cung cấp một hệ thống của Secret-
Management, cho phép thông tin thiết yếu cho an ninh và bảo trì của Couchbase
Server chính nó sẽ được lưu trữ dưới dạng mã hoá; và sau đó giải mã và sử dụng
hợp lý tại cluster-startup.
XLVIII
XLIX
6.1. Mã hóa lúc ngừng hoạt động
Mã hoá ở phần còn lại đề cập đến mã hóa dữ liệu nằm trên phương tiện vật
lý. Nó nên được sử dụng để bảo vệ dữ liệu được lưu trữ trên các phương tiện
truyền thông như vậy bởi Couchbase Server.

5.2.1. Bảo vệ Phương tiện Truyền thông


Couchbase Server sử dụng phương tiện vật lý để lưu trữ các tệp và chỉ mục.
Nếu phương tiện truyền thông bị đánh cắp, dữ liệu trở nên dễ bị truy cập trái phép.
Do đó, để bảo vệ những dữ liệu đó, mã hóa tất cả các dữ liệu quan trọng và
lưu trữ chỉ mục-vị trí, sử dụng mã hoá dữ liệu minh bạch, được cung cấp bởi các
nhà cung cấp phần mềm mã hoá trên đĩa của bên thứ ba; từ chối truy cập dữ liệu
cho bất kỳ ai không có khóa mã hoá thích hợp hoặc không tuân thủ với chính sách
bảo mật được chỉ định. Mã hóa như vậy đảm bảo rằng dữ liệu được lưu trữ không
thể bị tổn hại; ngay cả khi cơ sở dữ liệu bị đánh cắp, sao chép, mất hoặc truy cập
không đúng cách.
Thường được sử dụng các công cụ mã hóa của bên thứ ba bao gồm:
- Thiết lập khoá thống nhất Linux (LUKS):
- Vormetric
- Gemalto
- Tính

6.2. Mã hóa đối tượng


Các công cụ được liệt kê ở trên cho phép sử dụng mã hóa toàn bộ hoặc đĩa.
Nếu cấp tệp được chọn, các thư mục và tệp Couchbase sau đây cần được mã hóa:

Đường dẫn tệp dữ liệu và chỉ mục


- Linux: / opt / couchbase / var / lib / couchbase / dữ liệu
- Windows: C: \ Program Files \ couchbase \ server \ var \ lib \ couchbase \
data

L
Đường dẫn tập tin chỉ mục Global Secondary Index
- Linux: / opt / couchbase / var / lib / couchbase / data / @ 2i
- Windows: C: \ Program Files \ couchbase \ server \ var \ lib \ couchbase \
data \ @ 2i

Các tập tin cấu hình Couchbase và thư mục


- Linux: / opt / couchbase / var / lib / couchbase / dữ liệu
- Windows: C: \ Program Files \ couchbase \ server \ var \ lib \ couchbase \
data
Tập tin mật khẩu Couchbase
- Linux: /opt/couchbase/var/lib/couchbase/isasl.pw và / opt / couchbase / var /
lib / couchbase / config /.
- Windows: C: \ Program Files \ couchbase \ server \ var \ lib \ couchbase \
isasl.pw và C: \ Program Files \ couchbase \ server \ var \ lib \ couchbase \
var \ lib \ config \.

6.2.1. Mã hóa trên đường truyền


Dữ liệu trên đườngt ruyền cần phải được bảo vệ khỏi bị nghe trộm. Do đó,
Couchbase Server sử dụng SSL / TLS để mã hóa dữ liệu được truyền theo từng
cách sau: giữa máy khách và máy chủ; giữa các nút máy chủ trong một cụm; và
giữa các trung tâm dữ liệu.

6.2.2. Bảo vệ Quản trị viên Truy cập


Quản trị viên toàn quyền có thể định cấu hình quyền truy cập quản trị để
client-communication với Couchbase Server được mã hóa bằng SSL / TLS. Giao
thức này được hỗ trợ đầy đủ bởi Couchbase client-libraries cho cả Couchbase Web
Console và REST API.
Khi khởi tạo một cách an toàn, Couchbase Server tạo ra một chứng chỉ tự ký
cho nút ban đầu, sau đó được truyền trong tất cả các nút trong cluster. Về mặt an
ninh, chứng chỉ này được cho là phù hợp với các hoạt động tiền sản xuất của bạn:
LI
tùy chọn, bạn có thể chuyển sang chứng chỉ X.509, trước khi triển khai ứng dụng
vào sản xuất.

6.2.3. Kết nối an toàn vào Console


Couchbase Web Console có thể được truy cập qua HTTPS, trên cổng 18091.
Vì nó được bảo vệ bởi SSL / TLS, kết nối này được bảo mật.
Ví dụ, nếu bạn đã thiết lập Couchbase Web Console trên http: // servername:
8091, bạn có thể truy cập nó một cách an toàn vào https: // servername: 18091.

6.2.4. Thực hiện xác minh chứng chỉ


Để xác minh chứng chỉ mà cụm của bạn hiện đang sử dụng, truy cập
Couchbase Web Console, và nhấp chuột trái vào tab Security, trong thanh điều
hướng ở phía bên tay trái:

Hình 3. Xác minh chứng chỉ

Thao tác này sẽ hiển thị màn hình Bảo mật. Khi nó xuất hiện, nhấp chuột
trái vào tab Chứng chỉ gốc, nằm trên thanh điều khiển nằm ngang, phía trên đầu
(lưu ý rằng bạn phải ở trong vai trò của Quản trị viên, để xem và truy cập Chứng
chỉ gốc):

Hình 4. Chọn chứng chỉ gốc trong vai trò Quản trị viên

LII
Thao tác này hiển thị chế độ xem chứng chỉ gốc (Root Certificate View), có
chứa chứng chỉ gốc tự ký, trong một khung cuộn:

Hình 5. Chứng chỉ gốc (minh họa)

Lưu ý rằng chứng chỉ có thể được tái tạo hoặc thay thế, sử dụng API mã hoá
On-the-Wire, hoặc các lệnh CLI để quản lý chứng chỉ.

6.3. Mã hóa trong ứng dụng


Bạn có thể mã hóa dữ liệu bên trong ứng dụng của bạn, ngay cả trước khi nó
được gửi đến máy chủ. Điều này cho phép mã hoá được sử dụng có chọn lọc, chỉ
cho những thông tin nhạy cảm nhất mà bạn định gửi.
Khuyến khích:
Luôn luôn duy trì tính bí mật của khóa mã hóa: bằng vòng khoá an toàn
hoặc mô-đun bảo mật phần cứng (HSM).
Luôn sử dụng thư viện mã hóa tiêu chuẩn để mã hóa dữ liệu; và không bao
giờ dựa vào các giải pháp quản lý chìa khóa trong nhà hoặc mã hoá.
Không bao giờ, khi quản lý tài liệu, bao gồm thông tin nhạy cảm trong ID
tài liệu.

LIII
6.4. Secret-Management
Secret - Management cung cấp một cách để quản lý các bí mật máy chủ.
Điều này làm tăng tính bảo mật của dữ liệu và có khả năng làm cho nó đáp ứng
yêu cầu tuân thủ dễ dàng hơn.
Quản lý bí mật (đó là tính năng Enterprise Edition của Couchbase Server)
cho phép ghi các bí mật vào đĩa ở định dạng được mã hóa. Bí mật được Couchbase
Server xác định, và bao gồm các mật khẩu và chứng chỉ hệ thống thiết yếu.
Couchbase sử dụng thuật toán AES 256-bit ở chế độ GCM, để mã hóa bí mật bằng
cách sử dụng một hệ thống phân cấp mã hóa; như thể hiện trong minh hoạ sau:

LIV
Kết luận
Chúng ta đã đề cập đến rất nhiều trong những vấn đề chung, cần phải nhận
thức được để đưa ra quyết định trong thế giới mới của cơ sở dữ liệu NoSQL. Bây
giờ là lúc để nói về lý do tại sao chúng ta sẽ chọn cơ sở dữ liệu NoSQL. Dưới đây
là một số lý do để xem xét việc sử dụng các cơ sở dữ liệu NoSQL.
- Để cải thiện năng suất lập trình bằng cách sử dụng một cơ sở dữ liệu phù
hợp hơn với nhu cầu của ứng dụng.
- Để cải thiện hiệu suất truy cập dữ liệu thông qua một số sự kết hợp xử lý
khối lượng dữ liệu lớn hơn, giảm độ trễ, và cải thiện thông.

LV
Tài liệu tham khảo

- https://developer.couchbase.com/documentation/server/5.0/introduction/wha
ts-new.html
- https://en.wikipedia.org/wiki/Couchbase_Server

LVI

You might also like