tek4

Lưu trữ dữ liệu Blockchain như thế nào?

by - September. 21, 2021
Kiến thức
<p style="text-align: justify;">C&oacute; một c&acirc;u hỏi rất thường gặp khi x&acirc;y dựng một ứng dụng blockchain l&agrave; "T&ocirc;i cần lưu trữ dữ liệu ở đ&acirc;u v&agrave; l&agrave;m thế n&agrave;o để lưu được blockchain?". Vấn đề lưu trữ dữ liệu <a href="https://tek4.vn/kien-thuc/cong-nghe/blockchain/">blockchain</a> kh&ocirc;ng phải l&agrave; một b&agrave;i to&aacute;n đơn giản. C&oacute; rất nhiều vấn đề l&agrave;m cho việc lưu trữ dữ liệu blockchain trở l&ecirc;n kh&oacute; khăn.</p> <p><img class=" wp-image-4962 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/Lưu-trữ-dữ-liệu-blockchain.png" alt="Lưu trữ dữ liệu blockchain" width="646" height="335" /></p> <p style="text-align: justify;">Trong b&agrave;i viết n&agrave;y ch&uacute;ng ta sẽ tập trung v&agrave;o kh&iacute;a cạnh kỹ thuật trong việc thiết kế v&agrave; lựa chọn kiến tr&uacute;c cho việc x&acirc;y dựng hệ thống lưu trữ cho blockchain.</p> <p style="text-align: justify;">C&oacute; rất nhiều c&aacute;c giải ph&aacute;p lưu trữ blockchain kh&aacute;c nhau, tuy nhi&ecirc;n kh&ocirc;ng c&oacute; giải ph&aacute;p n&agrave;o l&agrave; vượt trội tuyệt đối. Việc sử dụng ch&uacute;ng khi n&agrave;o phụ thuộc v&agrave;o y&ecirc;u cầu sử dụng đối với từng ứng dụng của bạn.</p> <p style="text-align: justify;">Sau khi đọc b&agrave;i viết n&agrave;y, bạn sẽ c&oacute; một c&aacute;i nh&igrave;n tổng quan về tất cả c&aacute;c phương ph&aacute;p n&agrave;y. V&agrave; từ, đ&oacute; c&oacute; thể t&ugrave;y từng b&agrave;i to&aacute;n của m&igrave;nh để lựa chọn c&aacute;c giải ph&aacute;p lưu trữ ph&ugrave; hợp.</p> <p>B&acirc;y giờ, h&atilde;y bắt đầu n&agrave;o!</p> <h2 style="text-align: justify;">Đầu ti&ecirc;n, tại sao bạn cần lưu trữ dữ liệu tr&ecirc;n blockchain?</h2> <p style="text-align: justify;">Blockchain kh&ocirc;ng phải l&agrave; một liều thuốc chữa b&aacute;ch bệnh, n&oacute; kh&ocirc;ng phải bao giờ cũng c&oacute; thể l&agrave;m vấn đề của bạn trở l&ecirc;n tốt hơn. T&ocirc;i đ&atilde; thấy rất nhiều c&aacute;c dự &aacute;n blockchain kh&aacute;c nhau cố gắn c&ocirc;ng nghệ n&agrave;y v&agrave;o để l&agrave;m một c&aacute;i g&igrave; đ&oacute; m&agrave; ch&iacute;nh họ cũng kh&ocirc;ng r&otilde; r&agrave;ng hoặc cũng chẳng biết sẽ cải tiến được g&igrave; trong hệ thống cũ đang hoạt động của họ hay kh&ocirc;ng. Bạn l&agrave; một người l&agrave;m kỹ thuật v&igrave; vậy h&atilde;y tỉnh t&aacute;o v&agrave; nhận ra sự cường điều về c&ocirc;ng nghệ. Hay n&oacute;i c&aacute;ch kh&aacute;c l&agrave; "ng&aacute;o thuật ngữ" !</p> <p>[caption id="attachment_4963" align="aligncenter" width="642"]<img class="wp-image-4963 size-full" src="https://tek4.vn/wp-content/uploads/2019/10/blockchain.jpg" alt="blockchain" width="642" height="428" /> Nguồn: Ad Age[/caption]</p> <p style="text-align: justify;">Tại sao t&ocirc;i lại rất dị ứng vẫn đề n&agrave;y?</p> <p style="text-align: justify;">Blockchain trước ti&ecirc;n l&agrave; một c&ocirc;ng nghệ <strong>TỆ khủng khiếp</strong>. N&oacute; thực sự rất tệ. N&oacute; chậm, phức tạp, đắt tiền v&agrave; kh&oacute; l&agrave;m việc, kh&oacute; triển khai. C&oacute; v&ocirc; số c&aacute;c l&iacute; do để kh&ocirc;ng n&ecirc;n sử dụng n&oacute; trong thực tế. Nhưng n&oacute; vẫn đ&atilde; v&agrave; đang được sử dụng như một mốt, một xu hướng c&ocirc;ng nghệ hơn l&agrave; t&aacute;c dụng thực sự của n&oacute;.</p> <p style="text-align: justify;">Việc sử dụng blockchain đ&ocirc;i khi chẳng kh&aacute;c n&agrave;o bạn sử dụng một chiếc xe tăng để l&aacute;i tr&ecirc;n đường đua F1. N&oacute; c&oacute; thể tr&ocirc;ng kh&aacute; ho&agrave;nh tr&aacute;ng, ấn tượng, kh&aacute; an to&agrave;n, bảo đảm, nhưng sau tất cả điều quan trọng nhất l&agrave; tốc độ l&agrave; yếu tố cốt l&otilde;i n&oacute; lại kh&ocirc;ng đ&aacute;p ứng được.</p> <p style="text-align: justify;">Do đ&oacute; c&acirc;u hỏi đầu đầu ti&ecirc;n bạn phải tự hỏi trước khi thực sự bắt tay v&agrave;o x&acirc;y dựng hệ thống v&agrave; tiếp theo lựa chọn v&agrave; thiết kế giải ph&aacute;p lưu trữ blockchain l&agrave;: "Tại sao t&ocirc;i lại muốn sử dụng blockchain trong trường hợp n&agrave;y?". Vấn đề ch&iacute;nh x&aacute;c ở đ&acirc;y của bạn l&agrave; g&igrave;? V&agrave; n&oacute; c&oacute; thực sự cần blockchain hay kh&ocirc;ng?</p> <p><img class=" wp-image-4964 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/tại-sao-sử-dụng-blockchain.png" alt="tại sao sử dụng blockchain" width="639" height="428" /></p> <p style="text-align: justify;">Nếu bạn kh&ocirc;ng biết c&acirc;u trả lời cho c&acirc;u hỏi n&agrave;y, điều đ&oacute; c&oacute; nghĩa bạn kh&ocirc;ng hề cần blockchain cho ứng dụng của m&igrave;nh.</p> <p style="text-align: justify;">H&atilde;y lu&ocirc;n chọn c&ocirc;ng cụ ph&ugrave; hợp cho c&ocirc;ng việc của m&igrave;nh thay v&igrave; chạy theo mốt!</p> <p style="text-align: justify;">Sau một thời gian trở th&agrave;nh tr&agrave;o lưu th&igrave; người ta c&oacute; vẻ như đ&atilde; nhận ra gi&aacute; trị thực của blockchain. V&agrave; tất nhi&ecirc;n, bạn cũng n&ecirc;n nh&igrave;n nhận được điều đ&oacute;.</p> <p>Bạn chỉ n&ecirc;n sử dụng blockchain nếu ứng dụng của bạn cần &iacute;t nhất một hoặc nhiều hơn c&aacute;c t&iacute;nh chất sau đ&acirc;y:</p> <ul> <li style="text-align: justify;"><strong>Cơ sở để chứng minh t&iacute;nh giả mạo.</strong> Trong trường hợp n&agrave;y ứng dụng của bạn sẽ c&oacute; khả năng nhận dạng sự thay đổi v&agrave; cho ph&eacute;p bạn chứng minh rằng dữ liệu đ&atilde; bị thay đổi so với dữ liệu gốc. T&iacute;nh chất n&agrave;y thực tế c&oacute; thể dễ d&agrave;ng đạt được bằng c&aacute;ch sử dụng h&agrave;m băm hoặc chữ k&yacute; số. Trong trường hợp n&agrave;y, bạn chỉ n&ecirc;n sử dụng blockchain khi cần gi&aacute;m s&aacute;t sự thay đổi được thực hiện trực tiếp bởi Admin hay người quản trị hệ thống.</li> <li style="text-align: justify;"><strong>Phi tập trung.</strong> Bạn kh&ocirc;ng muốn c&oacute; một cơ quan trung ương tập trung để gi&aacute;m s&aacute;t c&aacute;c hoạt động. Thay v&agrave;o đ&oacute;, bạn muốn trao quyền kiểm so&aacute;t dữ liệu cho to&agrave;n bộ th&agrave;nh vi&ecirc;n trong mạng v&igrave; bạn kh&ocirc;ng thể tin tưởng v&agrave;o c&aacute;c b&ecirc;n li&ecirc;n quan. Với trường hợp n&agrave;y, blockchain l&agrave; một c&ocirc;ng nghệ l&iacute; tưởng.</li> <li style="text-align: justify;"><strong>T&iacute;nh minh bạch.</strong> Bạn muốn dữ liệu của m&igrave;nh được hiển thị cho mọi người v&agrave; kh&ocirc;ng thể sửa đổi được để thiết lập l&ograve;ng tin.</li> </ul> <p style="text-align: justify;">Sau khi đ&atilde; x&aacute;c định được tại sao bạn cần lưu trữ dữ liệu tr&ecirc;n blockchain, tiếp theo ch&uacute;ng ta cần x&aacute;c định ch&uacute;ng ta lưu trữ dữ liệu g&igrave;?</p> <h2 style="text-align: justify;">Dữ liệu g&igrave; cần được lưu trữ tr&ecirc;n blockchain?</h2> <p style="text-align: justify;">Sau khi trả lời được c&acirc;u hỏi ở phần trước, ch&uacute;ng ta đ&atilde; biết được ch&uacute;ng ta cần đảm bảo điều g&igrave; cho hệ thống, v&agrave; do đ&oacute; đ&atilde; x&aacute;c định được dữ liệu n&agrave;o cần được lưu trữ tr&ecirc;n blockchain.</p> <p><img class=" wp-image-4965 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/lưu-trữ-dữ-liệu-blockchain_2.jpg" alt="lưu trữ dữ liệu blockchain_2" width="512" height="267" /></p> <p style="text-align: justify;">V&iacute; dụ, nếu ch&uacute;ng ta muốn đảm bảo t&iacute;nh minh bạch của t&agrave;i khoản th&igrave; ch&uacute;ng ta sẽ lưu trữ th&ocirc;ng tin t&agrave;i khoản của người d&ugrave;ng... Tuy nhi&ecirc;n, do t&iacute;nh chất x&aacute;c nhận được sự thay đổi trạng th&aacute;i của blockchain, do đ&oacute;, c&aacute;c dữ liệu m&agrave; ch&uacute;ng ta lưu trữ trong blockchain phải l&agrave; c&aacute;c dữ liệu c&oacute; trạng th&aacute;i. Chẳng hạn như t&igrave;nh trạng thay đổi t&agrave;i khoản, sự thay đổi nh&acirc;n sự, sự thay đổi về b&aacute;o c&aacute;o t&agrave;i ch&iacute;nh,...</p> <p style="text-align: justify;">Ch&uacute;ng ta sẽ kh&ocirc;ng thể lưu trữ file tr&ecirc;n blockchain bởi n&oacute; rất lớn v&agrave; kh&ocirc;ng c&oacute; sự thay đổi trạng th&aacute;i cần x&aacute;c nhận.</p> <p style="text-align: justify;">Blockchain, đặc biệt l&agrave; những hệ thống được thiết kế để lưu trữ c&aacute;c loại tiền tệ, thường sử dụng m&ocirc; h&igrave;nh lưu trữ giao dịch.</p> <p style="text-align: justify;">V&iacute; dụ: "An gửi tiền cho B&igrave;nh" l&agrave; một giao dịch. Giao dịch n&agrave;y bao gồm địa chỉ của người gửi (An), địa chỉ của người nhận (B&igrave;nh) v&agrave; số tiền được chuyển. C&aacute;ch tiếp cận n&agrave;y rất trực quan khi n&oacute;i đến c&aacute;c giao dịch tiền tệ, tuy nhi&ecirc;n l&agrave;m thế n&agrave;o ch&uacute;ng ta c&oacute; thể lưu trữ dữ liệu kh&aacute;c theo m&ocirc; h&igrave;nh lưu trữ giao dịch n&agrave;y?</p> <p style="text-align: justify;">Để lưu trữ dữ liệu tương ứng trong từng b&agrave;i to&aacute;n của ch&uacute;ng ta tr&ecirc;n blockchain, ch&uacute;ng ta cần phải biến đổi v&agrave; đ&oacute;ng g&oacute;i dữ liệu của m&igrave;nh th&agrave;nh c&aacute;c giao dịch để c&oacute; thể lưu trữ được dữ liệu đ&oacute;.</p> <p><img class=" wp-image-4968 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/lưu-trữ-dữ-liệu-blockchain_3-1.png" alt="lưu trữ dữ liệu blockchain_3" width="540" height="360" /></p> <p style="text-align: justify;">Tại sao lại cần dữ liệu kiểu m&ocirc; h&igrave;nh giao dịch, bởi blockchain c&oacute; t&iacute;nh chất x&aacute;c thực trạng th&aacute;i giao dịch v&agrave; do đ&oacute;, mọi dữ liệu n&ecirc;n được biến đổi về dạng giao dịch.</p> <p>&nbsp;</p> <p style="text-align: justify;">Tuy nhi&ecirc;n c&oacute; nhiều m&ocirc; h&igrave;nh blockchain c&oacute; thể cho ph&eacute;p ghi bổ sung c&aacute;c dữ liệu v&agrave;o giao dịch v&agrave; điều ch&uacute;ng ta cần l&agrave;m chỉ đơn giản l&agrave; bổ sung c&aacute;c dữ liệu n&agrave;y c&ugrave;ng với giao dịch.</p> <p style="text-align: justify;">Trong trường hợp kh&aacute;c ch&uacute;ng ta vẫn c&oacute; thể lưu trữ một lượng nhỏ dữ liệu tr&ecirc;n blockchain bằng c&aacute;ch sử dụng &aacute;nh xạ địa chỉ.</p> <p style="text-align: justify;">Chẳng hạn, để lưu một số dữ liệu, ch&uacute;ng ta m&atilde; h&oacute;a n&oacute; (nếu cần) v&agrave; sử dụng n&oacute; l&agrave;m địa chỉ để gửi giao dịch đến. Bằng c&aacute;ch l&agrave;m như vậy, dữ liệu được lưu trữ trong blockchain dưới dạng giao dịch. Thay v&igrave; sử dụng một số payload b&ecirc;n trong giao dịch, dữ liệu được m&atilde; h&oacute;a trực tiếp v&agrave;o địa chỉ nhận.</p> <p style="text-align: justify;">Nhược điểm của kỹ thuật n&agrave;y l&agrave;, lượng dữ liệu lưu trữ kh&ocirc;ng thể lớn hơn k&iacute;ch thước địa chỉ của blockchains (rất nhỏ). Hơn nữa, ch&uacute;ng ta kh&ocirc;ng chỉ phải trả ph&iacute; giao dịch, m&agrave; c&ograve;n phải ti&ecirc;u hủy một số token nhất định khi thực hiện lưu trữ dữ liệu kiểu giao dịch n&agrave;y. Bởi khi đ&oacute;, việc giao dịch tr&ecirc;n địa chỉ đến đ&oacute; kh&ocirc;ng thuộc sở hữu của ch&uacute;ng ta, v&igrave; vậy số token ch&uacute;ng ta chuyển sẽ bị mất. Do đ&oacute;, tr&ecirc;n một số nền tảng Blockchain dạng giao dịch, để chuyển đổi dữ liệu v&agrave; lưu trữ tr&ecirc;n blockchain ở dạng n&agrave;y c&oacute; thể kh&ocirc;ng hiệu quả.</p> <h2 style="text-align: justify;">Những vấn đề về lưu trữ dữ liệu tr&ecirc;n blockchain</h2> <h3 style="text-align: justify;">Vấn đề về chi ph&iacute; v&agrave; giới hạn dữ liệu lưu trữ</h3> <p style="text-align: justify;">Vấn đề lớn nhất của việc lưu trữ dữ liệu tr&ecirc;n blockchain l&agrave; vấn đề về giới hạn lượng dữ liệu c&oacute; thể lưu trữ. Điều n&agrave;y l&agrave; do chi ph&iacute; lưu trữ dữ liệu sẽ cực kỳ lớn. Tại sao lại như vậy? Điều đ&oacute; bởi v&igrave; dữ liệu của bạn sẽ phải được lưu đồng thời tr&ecirc;n rất nhiều node của to&agrave;n mạng tr&ecirc;n to&agrave;n thế giới. Tất cả mọi người tải xuống blockchain cũng đang tải xuống phần dữ liệu của bạn. Do đ&oacute;, ngay cả khi dữ liệu của bạn chỉ nặng khoảng v&agrave;i kilobyte th&igrave; cũng khiến chi ph&iacute; lưu trữ đ&atilde; rất lớn.</p> <p><img class=" wp-image-4967 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/lưu-trữ-dữ-liệu-blockchain_4.jpg" alt="lưu trữ dữ liệu blockchain_4" width="529" height="231" /></p> <p style="text-align: justify;">Th&ecirc;m v&agrave;o đ&oacute;, nếu bạn ph&aacute;t triển ứng dụng của m&igrave;nh tr&ecirc;n một nền tảng t&iacute;nh ph&iacute; giao dịch th&igrave; chi ph&iacute; giao dịch m&agrave; bạn phải trả bằng token của mạng đ&oacute; sẽ cực kỳ lớn. Khi lưu trữ dữ liệu tr&ecirc;n blockchain, hầu hết ch&uacute;ng ta thường trả gi&aacute; cơ bản cho ch&iacute;nh giao dịch cộng với số tiền tr&ecirc;n mỗi byte m&agrave; ch&uacute;ng ta muốn lưu trữ. Nếu c&oacute; hợp đồng th&ocirc;ng minh, ch&uacute;ng ta cũng trả tiền cho thời gian thực hiện hợp đồng th&ocirc;ng minh. V&agrave; chi ph&iacute; n&agrave;y l&agrave; kh&ocirc;ng hề nhỏ nếu dữ liệu lớn v&agrave; được trao đổi thường xuy&ecirc;n.</p> <p style="text-align: justify;">Lượng dữ liệu ch&uacute;ng ta c&oacute; thể lưu trữ kh&aacute; hạn chế. Hầu hết c&aacute;c blockchain trả ph&iacute; chỉ cho ph&eacute;p ch&uacute;ng ta lưu trữ dữ liệu trong phạm vi v&agrave;i kilobyte hoặc &iacute;t hơn.</p> <p style="text-align: justify;">Về mặt l&yacute; thuyết, ch&uacute;ng ta c&oacute; thể ph&aacute; vỡ giới hạn đ&oacute; bằng c&aacute;ch chia dữ liệu th&agrave;nh nhiều phần nhỏ hơn. Điều n&agrave;y sẽ gi&uacute;p ch&uacute;ng ta lưu trữ c&aacute;c tệp v&agrave; dữ liệu lớn hơn nhưng cũng sẽ l&agrave;m tăng đ&aacute;ng kể chi ph&iacute; khi phải thực hiện giao dịch nhiều lần.</p> <h3 style="text-align: justify;">Vấn đề về t&iacute;nh ri&ecirc;ng tư của dữ liệu</h3> <p>Một vấn đề kh&aacute;c khi lưu trữ dữ liệu tr&ecirc;n blockchain đ&oacute; l&agrave; t&iacute;nh ri&ecirc;ng tư v&agrave; b&iacute; mật của dữ liệu c&aacute; nh&acirc;n.</p> <p>Tr&ecirc;n thực tế c&oacute; hai vấn đề ở đ&acirc;y:</p> <ul> <li style="text-align: justify;"><strong>Vấn đề về t&iacute;nh nh&acirc;n bản v&agrave; tiếp cận dữ liệu.</strong> Nếu ch&uacute;ng ta chọn một blockchain c&ocirc;ng khai như Ethereum, mọi người trong mạng đều sẽ c&oacute; khả năng truy cập trực tiếp v&agrave;o dữ liệu lưu trữ tr&ecirc;n blockchain của ch&uacute;ng ta. Điều n&agrave;y l&agrave; do trong một mạng blockchain, (hầu hết) mọi người tham gia đều c&oacute; một bản sao của to&agrave;n bộ chuỗi khối. Điều n&agrave;y xảy ra ngay cả khi bạn quyết định x&acirc;y dựng ứng dụng dưới dạng một blockchain ri&ecirc;ng tư (private blockchain), khi đ&oacute; mọi người tham gia cũng sẽ nhận được một bản sao của dữ liệu. Điều kh&aacute;c biệt duy nhất ở đ&acirc;y l&agrave;, ch&uacute;ng ta c&oacute; thể c&oacute; quyền kiểm so&aacute;t ai sẽ tham gia v&agrave;o mạng v&agrave; nhận được một bản sao của dữ liệu.</li> <li style="text-align: justify;"><strong>Vấn đề về việc x&oacute;a bỏ dữ liệu c&aacute; nh&acirc;n.</strong> Một trong những y&ecirc;u cầu về t&iacute;nh ri&ecirc;ng tư đối với dữ liệu của người d&ugrave;ng đ&oacute; l&agrave; ch&uacute;ng cần hỗ trợ việc x&oacute;a bỏ dữ liệu khi người d&ugrave;ng y&ecirc;u cầu. Thật kh&ocirc;ng may, theo thiết kế của blockchain th&igrave; ch&uacute;ng ta kh&ocirc;ng thể x&oacute;a dữ liệu khỏi n&oacute;. Dữ liệu sẽ tồn tại m&atilde;i tr&ecirc;n chuỗi khối d&ugrave; bất cứ điều g&igrave; xảy ra. Đ&acirc;y l&agrave; một vấn đề lớn với t&iacute;nh ri&ecirc;ng tư.</li> </ul> <p><img class=" wp-image-4969 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/T&iacute;nh-ri&ecirc;ng-tư-của-dữ-liệu.jpg" alt="T&iacute;nh ri&ecirc;ng tư của dữ liệu" width="524" height="393" /></p> <p style="text-align: justify;">Một số giải ph&aacute;p cho vấn đề n&agrave;y l&agrave; sử dụng c&aacute;c phương ph&aacute;p m&atilde; h&oacute;a dữ liệu. Nhược điểm của phương ph&aacute;p n&agrave;y l&agrave;, ch&uacute;ng ta phải xử l&yacute;, lưu trữ c&aacute;c kh&oacute;a m&atilde; h&oacute;a v&agrave; ph&acirc;n phối ch&uacute;ng một c&aacute;ch an to&agrave;n.</p> <p style="text-align: justify;">Một giải ph&aacute;p kh&aacute;c c&oacute; thể được sử dụng để giải quyết vấn đề n&agrave;y l&agrave; lưu trữ gi&aacute; trị băm của dữ liệu thay v&igrave; to&agrave;n bộ dữ liệu đ&oacute;.</p> <h3 style="text-align: justify;">Vấn đề truy xuất v&agrave; sử dụng dữ liệu</h3> <p style="text-align: justify;">Giả sử rằng, bằng nhiều c&aacute;ch n&agrave;o đ&oacute; kh&aacute;c nhau, ch&uacute;ng ta đ&atilde; giải quyết được hai vấn đề được đề cập ở tr&ecirc;n, v&agrave; ch&uacute;ng ta đ&atilde; lưu trữ được dữ liệu cần thiết tr&ecirc;n blockchain...</p> <p style="text-align: justify;">B&agrave;i to&aacute;n đặt ra ở đ&acirc;y đối với ch&uacute;ng ta đ&oacute; l&agrave;: L&agrave;m thế n&agrave;o để ch&uacute;ng ta c&oacute; thể lấy lại, truy xuất v&agrave; sử dụng dữ liệu n&agrave;y trong trường hợp ch&uacute;ng ta cần ch&uacute;ng?</p> <p style="text-align: justify;">Blockchain l&agrave; một dạng lưu trữ dữ liệu rất kh&aacute;c biệt so với c&aacute;c hệ thống lưu trữ dữ liệu truyền thống của ch&uacute;ng ta trước đ&acirc;y. N&oacute; kh&ocirc;ng phải l&agrave; một m&aacute;y chủ cơ sở dữ liệu SQL cố định để ch&uacute;ng ta c&oacute; thể truy cập v&agrave;o để truy vấn dữ liệu của m&igrave;nh.</p> <p><img class=" wp-image-4970 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/truy-vấn-dữ-liệu.jpg" alt="truy vấn dữ liệu" width="527" height="351" /></p> <p style="text-align: justify;">Tr&ecirc;n thực tế, hầu hết c&aacute;c blockchain chỉ cho ph&eacute;p tải xuống c&aacute;c giao dịch theo ID (gi&aacute; trị băm) của ch&uacute;ng. V&agrave; để truy vấn dữ liệu từ blockchain để ứng dụng cho c&aacute;c b&agrave;i to&aacute;n th&ocirc;ng tin quản l&yacute; thường rất chậm v&agrave; kh&ocirc;ng hiệu quả.</p> <p style="text-align: justify;">Vậy l&agrave;m thế n&agrave;o để ch&uacute;ng ta giải quyết tất cả những vấn đề n&agrave;y?</p> <h2>C&aacute;c giải ph&aacute;p lưu trữ dữ liệu blockchain</h2> <p style="text-align: justify;">C&oacute; nhiều c&aacute;ch kh&aacute;c nhau để lưu trữ dữ liệu blockchain. Dưới đ&acirc;y, ch&uacute;ng ta t&igrave;m hiểu một số c&aacute;ch lưu trữ cụ thể như sau:</p> <h3>Lưu trữ dữ liệu dạng th&ocirc; trực tiếp tr&ecirc;n blockchain</h3> <p style="text-align: justify;">Việc lưu trữ dữ liệu dưới dạng th&ocirc; v&agrave; đầy đủ trong blockchain l&agrave; giải ph&aacute;p lưu trữ dữ liệu blockchain đơn giản nhất. Hiện nay hầu hết c&aacute;c ứng dụng phi tập trung đơn giản sử dụng giải ph&aacute;p n&agrave;y. Tuy nhi&ecirc;n, c&aacute;ch tiếp cận n&agrave;y c&oacute; rất nhiều nhược điểm đ&aacute;ng kể.</p> <p style="text-align: justify;">Đầu ti&ecirc;n đ&oacute; l&agrave; ảnh hưởng của n&oacute; đến tốc độ x&aacute;c nhận giao dịch tr&ecirc;n blockchain. Khi khối lượng dữ liệu tăng l&ecirc;n, thời gian để qu&eacute;t qua v&agrave; t&iacute;nh to&aacute;n để x&aacute;c nhận giao dịch c&agrave;ng tăng. Điều n&agrave;y c&oacute; thể kh&ocirc;ng ảnh hưởng nhiều trong trường hợp giao dịch tiền tệ bởi c&aacute;c giao dịch c&oacute; thể diễn ra kh&aacute; nhanh ch&oacute;ng (khoảng một v&agrave;i ph&uacute;t, v&agrave; điều n&agrave;y cũng kh&ocirc;ng ảnh hưởng nhiều đến người d&ugrave;ng). Tuy nhi&ecirc;n, đối với c&aacute;c ứng dụng y&ecirc;u cầu luồng xử l&yacute; dữ liệu lớn v&agrave; phức tạp th&igrave; điều n&agrave;y sẽ g&acirc;y rất nhiều vấn đề về tốc độ.</p> <p><img class=" wp-image-4971 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/Lưu-trữ-dữ-liệu-blockchain.jpeg" alt="Lưu trữ dữ liệu blockchain" width="555" height="274" /></p> <p style="text-align: justify;">Rất nhiều ứng dụng c&oacute; thể y&ecirc;u cầu xử l&yacute; h&agrave;ng chục ng&agrave;n giao dịch mỗi gi&acirc;y. Chẳng hạn như c&aacute;c ứng dụng trong xử l&yacute; dữ liệu IoT hoặc trong c&aacute;c ứng dụng quản l&yacute; chuỗi cung ứng, xử l&yacute; th&ocirc;ng tin mạng x&atilde; hội,... th&igrave; phương ph&aacute;p n&agrave;y r&otilde; r&agrave;ng rất bất lợi.</p> <p style="text-align: justify;">Thứ hai, l&agrave; t&iacute;nh bất biến của dữ liệu. T&iacute;nh bất biến của dữ liệu l&agrave; một điểm mạnh của blockchain trong việc đảm bảo t&iacute;nh an to&agrave;n cho hệ thống nhưng n&oacute; lại l&agrave; điểm yếu cho việc lưu trữ dữ liệu. Trong nhiều trường hợp người d&ugrave;ng c&oacute; thể c&oacute; c&aacute;c y&ecirc;u cầu để thay đổi th&ocirc;ng tin hoặc dữ liệu n&agrave;o đ&oacute; của họ. Chẳng hạn như th&ocirc;ng tin t&agrave;i khoản c&aacute; nh&acirc;n hoặc thay thế ảnh đại diện của họ. Đ&acirc;y l&agrave; những y&ecirc;u cầu hết sức hợp l&yacute; của người d&ugrave;ng. V&agrave; đa phần c&aacute;c hệ thống truyền thống đều hỗ trợ t&iacute;nh chất n&agrave;y. Ch&uacute;ng ta c&oacute; thể "Th&ecirc;m - Sửa - X&oacute;a" dữ liệu một c&aacute;ch b&igrave;nh thường tr&ecirc;n c&aacute;c hệ thống n&agrave;y. Tuy nhi&ecirc;n với blockchain tất cả c&aacute;c dữ liệu được lưu trữ trước đ&oacute; sẽ nằm trong blockchain m&atilde;i m&atilde;i v&agrave; bất kỳ ai cũng c&oacute; thể nh&igrave;n thấy.</p> <p style="text-align: justify;">T&iacute;nh bất biến c&ograve;n dẫn đến một nhược điểm nữa trong việc lưu trữ dữ liệu blockchain đ&oacute; l&agrave; năng lực lưu trữu hay t&iacute;nh hiệu quả. Nếu tất cả c&aacute;c ứng dụng đều giữ dữ liệu của m&igrave;nh dưới dạng th&ocirc; đầy đủ tr&ecirc;n blockchain, th&igrave; k&iacute;ch thước blockchain sẽ ng&agrave;y c&agrave;ng tăng nhanh, vượt qu&aacute; dung lượng ổ cứng c&oacute; thể đ&aacute;p ứng được của c&aacute;c node lưu trữ c&ocirc;ng khai. C&aacute;c node đầy đủ được sử dụng để l&agrave;m c&aacute;c node x&aacute;c thực của blockchain c&oacute; thể sẽ y&ecirc;u cầu c&aacute;c loại phần cứng đặc biệt. Điều n&agrave;y c&oacute; thể dẫn đến việc tập trung h&oacute;a của blockchain. Đ&oacute; l&agrave; l&yacute; do tại sao lưu trữ dữ liệu đầy đủ dưới dạng th&ocirc; trong blockchain kh&ocirc;ng phải l&agrave; một lựa chọn tốt đối với một ứng dụng phi tập trung đ&ograve;i hỏi xử l&yacute; nhiều dữ liệu. Một số cải tiến của việc lưu trữ dữ liệu dưới dạng gi&aacute; trị băm tr&ecirc;n blockchain v&agrave; lưu trữ một phần dữ liệu trực tiếp tr&ecirc;n blockchain.</p> <h3>Lưu trữ dữ liệu dạng băm tr&ecirc;n blockchain</h3> <p style="text-align: justify;">Để khắc phục vấn đề đối với dung lượng lưu trữ dữ liệu blockchain, một giải ph&aacute;p c&oacute; thể được sử dụng đ&oacute; l&agrave; sử dụng giải ph&aacute;p lưu trữ dữ liệu dưới dạng gi&aacute; trị băm. Chẳng hạn thay v&igrave; to&agrave;n bộ một file nhạc .mp3 với dung lượng 4MB ch&uacute;ng ta c&oacute; thể lưu n&oacute; dưới dạng gi&aacute; trị băm tương ứng chỉ gồm 160 bit (20 byte).</p> <p><img class=" wp-image-4972 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/gi&aacute;-trị-băm.jpg" alt="gi&aacute; trị băm" width="638" height="305" /></p> <p style="text-align: justify;">Ch&uacute;ng ta đ&atilde; biết về h&agrave;m băm v&agrave; c&aacute;c t&iacute;nh chất của n&oacute;. H&agrave;m băm sẽ tạo ra c&aacute;c bản t&oacute;m lược của dữ liệu đầu v&agrave;o v&agrave; đại diện cho đầu v&agrave;o. Mỗi đầu v&agrave;o kh&aacute;c nhau sẽ cho ra đầu ra ho&agrave;n to&agrave;n kh&aacute;c nhau v&agrave; mỗi đầu v&agrave;o chỉ tạo ra một đầu ra duy nhất. Do đ&oacute;, từ việc xem x&eacute;t sự thay đổi của gi&aacute; trị băm của đầu v&agrave;o, ch&uacute;ng ta c&oacute; thể x&aacute;c định xem liệu dữ liệu đầu v&agrave;o gốc c&oacute; bị thay đổi hay kh&ocirc;ng?</p> <p style="text-align: justify;">Một t&iacute;nh chất quan trọng kh&aacute;c của h&agrave;m băm đ&oacute; l&agrave; n&oacute; sẽ tạo ra được những gi&aacute; trị c&oacute; độ d&agrave;i cố định v&agrave; thường rất nhỏ từ dữ liệu c&oacute; k&iacute;ch thước bất kỳ (thường rất lớn - lớn hơn rất nhiều so với gi&aacute; trị băm). Do đ&oacute;, khi lưu trữ gi&aacute; trị băm thay v&igrave; dữ liệu th&ocirc; gốc ch&uacute;ng ta sẽ tiết kiệm được kh&aacute; nhiều kh&ocirc;ng gian lưu trữ v&agrave; t&agrave;i nguy&ecirc;n cần thiết.</p> <p style="text-align: justify;">Trong trường hợp n&agrave;y, dữ liệu th&ocirc; gốc c&oacute; thể được lưu trữ theo bất kỳ c&aacute;ch n&agrave;o ch&uacute;ng ta muốn. V&iacute; dụ: ch&uacute;ng ta c&oacute; thể sử dụng c&aacute;c hệ cơ sở dữ liệu quan hệ như SQL hoặc chỉ đơn giản l&agrave; lưu n&oacute; dưới dạng một tệp hay hệ thống tệp tại m&aacute;y cục bộ.</p> <p style="text-align: justify;">Điều duy nhất ch&uacute;ng ta cần ch&uacute; &yacute; l&agrave; đảm bảo rằng ch&uacute;ng ta li&ecirc;n kết ch&iacute;nh x&aacute;c gi&aacute; trị băm của dữ liệu tr&ecirc;n blockchain tương ứng với dữ liệu th&ocirc; m&agrave; ch&uacute;ng ta cần lưu trữ. Chẳng hạn trong cơ sở dữ liệu quan hệ, ch&uacute;ng ta sẽ th&ecirc;m một cột kh&aacute;c để lưu trữ gi&aacute; trị băm n&agrave;y v&agrave; li&ecirc;n kết đến dữ liệu th&ocirc; tương ứng.</p> <p style="text-align: justify;">Với giải ph&aacute;p n&agrave;y, ch&uacute;ng ta c&oacute; thể sử dụng c&aacute;c lợi thế của c&aacute;c cơ chế lưu trữ truyền thống (như truy vấn dữ liệu quan hệ) trong khi vẫn đảm bảo được việc chứng minh giả mạo của blockchain. Bất cứ khi n&agrave;o, ch&uacute;ng ta nghi ngờ về dữ liệu, ch&uacute;ng ta đều c&oacute; thể băm dữ liệu th&ocirc; v&agrave; so s&aacute;nh n&oacute; với gi&aacute; trị băm được chỉ định trong blockchain.</p> <p style="text-align: justify;">Tuy nhi&ecirc;n, t&ugrave;y theo cơ chế lưu trữ m&agrave; bạn sử dụng, c&aacute;c t&iacute;nh chất như ph&acirc;n cấp v&agrave; minh bạch của blockchain c&oacute; thể kh&ocirc;ng đ&aacute;p ứng được.</p> <h3>Lưu trữ một phần dữ liệu th&ocirc; tr&ecirc;n blockchain</h3> <p style="text-align: justify;">Để khắc phục vấn đề về mất t&iacute;nh ph&acirc;n cấp v&agrave; minh bạch đối với phương ph&aacute;p lưu trữ gi&aacute; trị băm. Ch&uacute;ng ta c&oacute; thể sử dụng biện ph&aacute;p lưu trữ một phần dữ liệu th&ocirc; kết hợp với gi&aacute; trị băm của dữ liệu tr&ecirc;n blockchain. Giải ph&aacute;p lưu trữ n&agrave;y c&oacute; thể giải quyết được một mức độ nhất định vấn đề về t&iacute;nh ph&acirc;n cấp cũng như minh bạch ở tr&ecirc;n.</p> <p><img class=" wp-image-4973 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/lưu-trữ-một-phần-dữ-liệu.jpg" alt="lưu trữ một phần dữ liệu" width="531" height="399" /></p> <p style="text-align: justify;">Điều n&agrave;y t&ugrave;y thuộc v&agrave;o c&aacute;c phần của dữ liệu được lưu trữ. Trong trường hợp n&agrave;y t&iacute;nh minh bạch được đ&aacute;p ứng bởi dữ liệu hiện gốc hiện c&oacute; c&oacute; thể được truy cập c&ocirc;ng khai.</p> <p style="text-align: justify;">Ngo&agrave;i ra, do một tập hợp con của dữ liệu được lưu trữ phi tập trung thay v&igrave; được lưu trữ trong cơ sở dữ liệu trung t&acirc;m do đ&oacute; n&oacute; vẫn đ&aacute;p ứng được t&iacute;nh phi tập trung của ứng dụng.</p> <h3>Ch&uacute; &yacute;</h3> <p style="text-align: justify;">Ở đ&acirc;y, ch&uacute;ng ta c&oacute; một điều cần ch&uacute; &yacute; rằng. Dữ liệu lưu trữ tr&ecirc;n blockchain kh&aacute;c với dữ liệu lưu trữ của ứng dụng. Chẳng hạn, với một ứng dụng thương mại điện tử c&oacute; chức năng b&aacute;n v&agrave; ph&acirc;n phối c&aacute;c bản nhạc .mp3 dựa tr&ecirc;n smart contract th&igrave; dữ liệu lưu tr&ecirc;n blockchain của ch&uacute;ng ta c&oacute; thể l&agrave; c&aacute;c giao dịch mua b&aacute;n bao gồm: số tiền trả, t&ecirc;n b&agrave;i h&aacute;t, t&ecirc;n t&aacute;c giả... n&oacute;i chung l&agrave; những th&ocirc;ng tin đủ để thực hiện giao dịch mua b&aacute;n b&agrave;i h&aacute;t. Nhưng file nhạc .mp3 ch&uacute;ng ta c&oacute; thể lưu tr&ecirc;n một m&aacute;y chủ hoặc dịch vụ lưu trữ n&agrave;o đ&oacute;. Bởi điều ch&uacute;ng ta muốn ở đ&acirc;y l&agrave; đảm bảo được t&iacute;nh an to&agrave;n cho giao dịch chứ kh&ocirc;ng phải cho bản th&acirc;n nội dung b&agrave;i h&aacute;t. Nhưng trong trường hợp ch&uacute;ng ta muốn bảo vệ cả bản th&acirc;n b&agrave;i h&aacute;t th&igrave; ch&uacute;ng ta c&oacute; thể lưu một phần hoặc một đại diện dấu hiệu cho b&agrave;i h&aacute;t để x&aacute;c thực sự vi phạm bản quyền tr&ecirc;n blockchain... Hai kh&iacute;a cạnh lưu trữ n&agrave;y được gọi l&agrave; on-chain (tr&ecirc;n chuỗi) v&agrave; off-chain (ngo&agrave;i chuỗi).</p> <p><img class=" wp-image-4974 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/Off-chain.jpg" alt="Off chain" width="589" height="353" /></p> <p style="text-align: justify;">Việc chọn c&aacute;ch thức lưu trữ dữ liệu on-chain hay off-chain đối với từng loại dữ liệu sẽ phụ thuộc v&agrave;o từng ứng dụng v&agrave; b&agrave;i to&aacute;n cụ thể. Nhưng nh&igrave;n chung th&igrave;:</p> <p style="text-align: justify;">Nếu ch&uacute;ng ta muốn đảm bảo t&iacute;nh chất phi tập trung, minh bạch hoặc chống giả mạo cho dữ liệu g&igrave; th&igrave; lưu n&oacute; l&ecirc;n blockchain (on-chain) c&ograve;n dữ liệu g&igrave; c&oacute; thể độc lập b&ecirc;n ngo&agrave;i th&igrave; n&ecirc;n lưu off-chain v&agrave; c&agrave;ng lưu được dữ liệu off-chain nhiều ch&uacute;ng ta sẽ c&agrave;ng tiết kiệm được kh&ocirc;ng gian lưu trữ v&agrave; tối ưu h&oacute;a cho blockchain.</p> <p style="text-align: justify;">Ở ph&iacute;a tr&ecirc;n, ch&uacute;ng ta đ&atilde; n&oacute;i đến c&aacute;c giải ph&aacute;p lưu trữ dữ liệu blockchain trong đ&oacute; chỉ sử dụng gi&aacute; trị băm hoặc lưu một phần dữ liệu tr&ecirc;n ứng dụng tr&ecirc;n blockchain. Vậy phần c&ograve;n lại hoặc nội dung gốc của dữ liệu c&oacute; thể được lưu trữ (off-chain) ở đ&acirc;u?</p> <h2>Vấn đề off-chain trong lưu trữ dữ liệu blockchain</h2> <h3>C&aacute;c giải ph&aacute;p lưu trữ dữ liệu truyền thống</h3> <p style="text-align: justify;">Ch&uacute;ng ta c&oacute; thể sử dụng c&aacute;c giải ph&aacute;p lưu trữ dữ liệu truyền thống như c&aacute;c hệ thống tệp tin tr&ecirc;n m&aacute;y chủ lưu trữ cục bộ hoặc để tiện lợi cho c&aacute;c vấn đề với truy vấn dữ liệu, ch&uacute;ng ta c&oacute; thể sử dụng c&aacute;c giải ph&aacute;p hệ quản trị cơ sở dữ liệu truyền thống như MySQL, SQL Server, hay hiện đại hơn như <a href="https://en.wikipedia.org/wiki/MongoDB">MongoDB</a>, PostgreSQL.</p> <p style="text-align: justify;">Giải ph&aacute;p n&agrave;y c&oacute; thể được sử dụng với mọi loại lưu trữ kể cả lưu trữ c&aacute;c dữ liệu on-chain. Trong trường hợp on-chain, mỗi m&aacute;y kh&aacute;ch sẽ cần c&agrave;i đặt một hệ quản trị dữ liệu tương ứng v&agrave; đồng bộ h&oacute;a dữ liệu qua c&aacute;c giao thức P2P. Với trường hợp off-chain, ch&uacute;ng ta chỉ cần một m&aacute;y chủ lưu trữ dữ liệu duy nhất để lưu trữ c&aacute;c nội dung của dữ liệu.</p> <p><img class=" wp-image-4975 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/SQL-Vs-NoSQL.jpg" alt="SQL-Vs-NoSQL" width="624" height="328" /></p> <p style="text-align: justify;">Ưu điểm của giải ph&aacute;p lưu trữ n&agrave;y l&agrave; gi&aacute; th&agrave;nh rẻ v&agrave; c&oacute; thể lưu trữ một số lượng cực lớn dữ liệu. Đặc biệt nếu ch&uacute;ng ta sử dụng c&aacute;c hệ quản trị cơ sở dữ liệu như MySQL hay MongoDB v&agrave; định nghĩa cấu tr&uacute;c nội dung đầy đủ chi tiết cho dữ liệu,... th&igrave; ch&uacute;ng ta c&ograve;n c&oacute; khả năng truy vấn dữ liệu với tốc độ cực kỳ nhanh v&agrave; mạnh mẽ.</p> <p style="text-align: justify;">Nhược điểm của phương ph&aacute;p n&agrave;y tất nhi&ecirc;n l&agrave; t&iacute;nh chất tập trung. T&iacute;nh chất n&agrave;y c&oacute; thể g&acirc;y ra nghẽn cổ chai tại một điểm, hoặc m&aacute;y chủ lưu trữ bị lỗi sẽ l&agrave;m tạo n&ecirc;n gi&aacute;n đoạn dịch vụ (single point failure). Ngo&agrave;i ra n&oacute; đ&ograve;i hỏi sự kiểm so&aacute;t của một cơ quan quản l&yacute; tập trung. Điều n&agrave;y dẫn đến sự thiếu minh bạch dữ liệu.</p> <h3>Hệ thống lưu trữ file ngang h&agrave;ng</h3> <p style="text-align: justify;">C&aacute;c hệ thống lưu trữ file ngang h&agrave;ng (Peer to peer file system) chẳng hạn như IPFS (InterPlanetary File System) cũng l&agrave; một lựa chọn được sử dụng để lưu trữ dữ liệu cho blockchain. IPFS cho ph&eacute;p chia sẻ tệp tr&ecirc;n m&aacute;y kh&aacute;ch v&agrave; hợp nhất ch&uacute;ng trong hệ thống tệp to&agrave;n cục. C&ocirc;ng nghệ n&agrave;y dựa tr&ecirc;n giao thức <a href="https://en.wikipedia.org/wiki/BitTorrent">BitTorrent</a> v&agrave; Bảng ph&acirc;n phối Hash (Distributed Hash Table).</p> <p style="text-align: justify;">IPFS c&oacute; rất nhiều ưu điểm. N&oacute; hoạt động ngang h&agrave;ng, do đ&oacute; việc chia sẻ dữ liệu diễn ra rất đơn giản. Dữ liệu được tải xuống chỉ khi ai đ&oacute; cần n&oacute;. Dữ liệu được đ&aacute;nh địa chỉ nội dung v&agrave; được x&aacute;c thực, v&igrave; vậy nội dung của dữ liệu kh&ocirc;ng thể bị giả mạo. C&aacute;c tệp c&oacute; mức độ phổ biến cao c&oacute; thể được tải xuống rất nhanh nhờ giao thức BitTorrent.</p> <p><img class=" wp-image-4976 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/IPFS.jpg" alt="IPFS" width="629" height="419" /></p> <p style="text-align: justify;">Tuy nhi&ecirc;n n&oacute; cũng c&oacute; một số nhược điểm. Đầu ti&ecirc;n, do n&oacute; hoạt động theo giao thức ngang h&agrave;ng, do đ&oacute; c&aacute;c m&aacute;y kh&aacute;ch chứa dữ liệu phải đảm bảo online thường xuy&ecirc;n thậm ch&iacute; 100% với c&aacute;c hệ thống đảm bảo t&iacute;nh sẵn s&agrave;ng cao. Hoặc &iacute;t nhất l&agrave; trong khi một người n&agrave;o đ&oacute; muốn tải dữ liệu được lưu trữ đ&oacute; về. Tiếp theo, cấu tr&uacute;c lưu trữ ở đ&acirc;y l&agrave; bền vững do t&iacute;nh chất của blockchain, v&agrave; ch&uacute;ng ta kh&ocirc;ng thể sửa đổi hay x&oacute;a dữ liệu sau khi tải l&ecirc;n. V&agrave; tất nhi&ecirc;n với cấu tr&uacute;c lưu trữ n&agrave;y bạn kh&ocirc;ng thể truy vấn hay t&igrave;m kiếm c&aacute;c tệp theo nội dung của ch&uacute;ng được. C&aacute;ch duy nhất để truy cập được dữ liệu l&agrave; th&ocirc;ng qua t&ecirc;n v&agrave; đường dẫn của ch&uacute;ng.</p> <h3 style="text-align: justify;">Hệ thống lưu trữ file đ&aacute;m m&acirc;y phi tập trung</h3> <p style="text-align: justify;">C&aacute;c hệ thống lưu trữ ngang h&agrave;ng như IPFS đ&ograve;i hỏi c&aacute;c th&agrave;nh vi&ecirc;n tham gia cần online thường xuy&ecirc;n. Điều n&agrave;y c&oacute; thể g&acirc;y ra nhiều hạn chế khi ứng dụng trong thực tế. Để khắc phục nhược điểm n&agrave;y, ch&uacute;ng ta c&oacute; thể sử dụng hệ thống lưu trữ đ&aacute;m m&acirc;y phi tập trung.</p> <p style="text-align: justify;">Giải ph&aacute;p lưu trữ n&agrave;y tương tự như việc lưu trữ file tr&ecirc;n Dropbox hay Google Drive m&agrave; ch&uacute;ng ta vẫn l&agrave;m. Điều kh&aacute;c biệt ở đ&acirc;y l&agrave; dữ liệu được lưu trữ tr&ecirc;n c&aacute;c m&aacute;y t&iacute;nh của người d&ugrave;ng, những người cung cấp dung lượng ổ cứng cho thu&ecirc;, thay v&igrave; ở c&aacute;c trung t&acirc;m dữ liệu đ&aacute;m m&acirc;y tập trung.</p> <p><img class=" wp-image-4977 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/Lưu-trữ-phi-tập-trung.png" alt="Lưu trữ phi tập trung" width="636" height="325" /></p> <p style="text-align: justify;">Sia, Storj, Ethereum Swarm...l&agrave; những giải ph&aacute;p điển h&igrave;nh cho c&aacute;c hệ thống n&agrave;y. Với c&aacute;c giải ph&aacute;p n&agrave;y, người d&ugrave;ng kh&ocirc;ng cần phải trực tuyến để chia sẻ tập tin của m&igrave;nh. Điều duy nhất người d&ugrave;ng cần l&agrave;m l&agrave; tải l&ecirc;n tệp tin cần chia sẻ v&agrave; tệp tin n&agrave;y sẽ được ph&aacute;t t&aacute;n tr&ecirc;n đ&aacute;m m&acirc;y phi tập trung. Những kho lưu trữ n&agrave;y c&oacute; độ tin cậy cao, đủ nhanh, v&agrave; c&oacute; khả năng lưu trữ dung lượng rất lớn.</p> <p style="text-align: justify;">Tuy nhi&ecirc;n, nhược điểm của giải ph&aacute;p n&agrave;y cũng như c&aacute;c gi&aacute;i ph&aacute;p tr&ecirc;n l&agrave; ch&uacute;ng cũng chỉ lưu trữ c&aacute;c tệp dưới dạng tĩnh, v&agrave; ch&uacute;ng cũng kh&ocirc;ng lưu trữ dữ liệu dưới dạng c&oacute; cấu tr&uacute;c, do đ&oacute; rất hạn chế trong vấn đề t&igrave;m kiếm v&agrave; truy vấn nội dung. Th&ecirc;m v&agrave;o đ&oacute;, do được x&acirc;y dựng tr&ecirc;n nền tảng c&aacute;c phần cứng cho thu&ecirc; từ cộng đồng, v&igrave; vậy sử dụng c&aacute;c giải ph&aacute;p n&agrave;y đều phải trả ph&iacute;.</p> <h3>Lưu trữ dữ liệu tr&ecirc;n c&aacute;c hệ quản trị cơ sở dữ liệu ph&acirc;n t&aacute;n</h3> <p style="text-align: justify;">Trong rất nhiều b&agrave;i to&aacute;n, ngo&agrave;i việc lưu trữ dữ liệu th&igrave; ch&uacute;ng ta cũng cần sử dụng c&aacute;c chức năng về truy vấn v&agrave; t&igrave;m kiếm dữ liệu n&acirc;ng cao. Do đ&oacute;, c&aacute;c giải ph&aacute;p lưu trữ truyền thống sẽ kh&ocirc;ng giải quyết được vấn đề n&agrave;y, đặc biệt trong những ứng dụng dữ liệu lớn (big data). Trong trường hợp n&agrave;y, một giải ph&aacute;p để xem x&eacute;t sử dụng đ&oacute; l&agrave; sử dụng c&aacute;c hệ quản trị cơ sở dữ liệu NoSQL ph&acirc;n t&aacute;n. Tại sao ch&uacute;ng ta kh&ocirc;ng sử dụng m&ocirc; h&igrave;nh cơ sở dữ liệu quan hệ SQL truyền thống. Bởi theo nguy&ecirc;n l&yacute; CAP, cơ sở dữ liệu SQL truyền thống sẽ kh&ocirc;ng thể đảm bảo t&iacute;nh ph&acirc;n t&aacute;n thực sự do phải đ&aacute;nh đổi một số t&iacute;nh chất quan trọng của cơ sở dữ liệu như t&iacute;nh nhất qu&aacute;n hoặc t&iacute;nh sẵn c&oacute;.</p> <p style="text-align: justify;">C&aacute;c cơ sở dữ liệu NoSQL tập trung v&agrave;o t&iacute;nh khả dụng v&agrave; đảm bảo t&iacute;nh nhất qu&aacute;n khi tất cả c&aacute;c n&uacute;t cơ sở dữ liệu trong mạng đồng bộ dữ liệu sau một khoảng thời gian nhất định. C&oacute; rất nhiều giải ph&aacute;p dạng n&agrave;y như MongoDB, Apache Cassandra, RethinkDB,...hoặc c&aacute;c giải ph&aacute;p đ&aacute;m m&acirc;y như Azure CosmosDB.</p> <p><img class=" wp-image-4978 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/Cơ-sở-dữ-liệu-NoSQL.png" alt="Cơ sở dữ liệu NoSQL" width="595" height="425" /></p> <p style="text-align: justify;">Ch&uacute;ng rất tốt, nhanh, c&oacute; thể mở rộng, c&oacute; khả năng chịu lỗi, hỗ trợ ng&ocirc;n ngữ truy vấn phong ph&uacute;... Trong c&aacute;c hệ quản cơ sở dữ liệu ph&acirc;n t&aacute;n, dữ liệu được sao ch&eacute;p tr&ecirc;n nhiều n&uacute;t ở nhiều vị tr&iacute; kh&aacute;c nhau. Điều n&agrave;y tạo ra sự ổn định trong trường hợp một bộ phận của hệ thống bị hỏng h&oacute;c hoặc gặp lỗi. N&oacute; cũng c&oacute; thể l&agrave;m giảm độ trễ cho c&aacute;c ứng dụng với quy m&ocirc; lớn.</p> <p style="text-align: justify;">Tuy nhi&ecirc;n ch&uacute;ng vẫn c&oacute; nhược điểm khi muốn ứng dụng v&agrave;o một số b&agrave;i to&aacute;n thực tế tr&ecirc;n blockchain đ&oacute; l&agrave; ch&uacute;ng kh&ocirc;ng c&oacute; t&iacute;nh chất Byzantine proof tức l&agrave; khả năng chịu lỗi đồng thuận trong trường hợp c&oacute; c&aacute;c th&agrave;nh vi&ecirc;n kh&ocirc;ng tin cậy. Tất cả c&aacute;c n&uacute;t của cụm phải ho&agrave;n to&agrave;n tin tưởng lẫn nhau. Bất kỳ một n&uacute;t độc hại n&agrave;o c&oacute; thể ph&aacute; hủy to&agrave;n bộ cơ sở dữ liệu. Th&ecirc;m v&agrave;o đ&oacute;,n&oacute; thường được kiểm so&aacute;t bởi những b&ecirc;n tin cậy nhất định do đ&oacute; n&oacute; c&oacute; thể dẫn đến vấn đề thiếu t&iacute;nh minh bạch.</p> <h2>Lưu trữ dữ liệu on-chain với blockchain</h2> <p style="text-align: justify;">Ở phần trước ch&uacute;ng ta đ&atilde; t&igrave;m hiểu một số c&aacute;ch lưu trữ dữ liệu blockchain truyền thống cho cả giải ph&aacute;p lưu trữ on-chain v&agrave; off-chain. Tuy nhi&ecirc;, ngo&agrave;i những giải ph&aacute;p n&agrave;y, ch&uacute;ng ta cũng c&oacute; thể sử dụng những hệ quản trị cơ sở dữ liệu dựa tr&ecirc;n blockchain để lưu trữ dữ liệu. Ở đ&acirc;y, ch&uacute;ng ta nhắc đến 2 giải ph&aacute;p: BigChainDB d&ugrave;ng cho c&aacute;c hệ thống private blockchain (hay blockchain c&oacute; cấp ph&eacute;p) v&agrave; TiesDB giải ph&aacute;p d&ugrave;ng cho c&aacute;c hệ thống public blockchain (hay blockchain c&ocirc;ng cộng).</p> <h3>BigChainDB</h3> <p style="text-align: justify;">BigChainDB l&agrave; một giải ph&aacute;p lưu trữ dựa tr&ecirc;n blockchain tập trung v&agrave;o việc n&acirc;ng cao tốc độ giao dịch. N&oacute; cũng l&agrave; một blockchain nhưng c&oacute; khả năng lưu trữ dữ liệu khổng lồ v&agrave; gi&uacute;p thực hiện giao dịch thực sự nhanh ch&oacute;ng.</p> <p style="text-align: justify;">BigChainDB được x&acirc;y dựng dựa tr&ecirc;n hệ quản trị cơ sở dữ liệu ph&acirc;n t&aacute;n RethinkDB, đ&atilde; được đề cập ở phần trước. BigChainDB sử dụng n&oacute; để lưu trữ tất cả c&aacute;c khối v&agrave; giao dịch do đ&oacute; n&oacute; cho th&ocirc;ng lượng truy cập cao. Tất cả c&aacute;c n&uacute;t tr&ecirc;n BigChainDB được kết nối với nhau v&agrave; c&oacute; quyền ghi đầy đủ v&agrave;o cơ sở dữ liệu.</p> <p><img class=" wp-image-4979 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/BigChainDB.jpeg" alt="BigChainDB" width="575" height="301" /></p> <p style="text-align: justify;">Đ&acirc;y l&agrave; một vấn đề, bởi RethinkDB kh&ocirc;ng c&oacute; t&iacute;nh kh&aacute;ng lỗi Byzantine! Do đ&oacute;, bất kỳ một node độc hại n&agrave;o cũng c&oacute; thể ph&aacute; hủy dữ liệu tr&ecirc;n RethinkDB. Do đ&oacute;, khi muốn ứng dụng RethinkDB th&igrave; c&aacute;c node phải đảm bảo tuyệt đối tin cậy lẫn nhau. V&igrave; vậy, n&oacute; chỉ ứng dụng tốt cho c&aacute;c m&ocirc; h&igrave;nh tin cậy như Private blockchain v&agrave; kh&ocirc;ng ph&ugrave; hợp để lưu trữ c&aacute;c blockchain c&ocirc;ng cộng.</p> <h3>Ties DB</h3> <p style="text-align: justify;">Để đ&aacute;p ứng được c&aacute;c public blockchain th&igrave; hệ thống lưu trữ dữ liệu phải c&oacute; khả năng chịu lỗi Byzantine. Đ&acirc;y l&agrave; điều m&agrave; đa số c&aacute;c giải ph&aacute;p trước đ&acirc;y chưa đ&aacute;p ứng được. Cơ sở dữ liệu Ties.Network (Ties DB) thừa hưởng phần lớn t&iacute;nh năng cơ bản của hệ quản trị cơ sở dữ liệu ph&acirc;n t&aacute;n Cassandra kết hợp với một số sửa đổi nhằm bổ sung cơ chế gi&uacute;p giải quyết vấn đề chịu lỗi Byzantine.</p> <p style="text-align: justify;">Với c&aacute;c t&iacute;nh năng n&agrave;y, Ties DB trở th&agrave;nh một hệ quản trị cơ sở dữ liệu c&ocirc;ng cộng v&agrave; cho ph&eacute;p t&iacute;ch hợp với c&aacute;c ứng dụng kh&aacute;c nhau tr&ecirc;n nền tảng Ethereum v&agrave; c&aacute;c blockchain kh&aacute;c bằng c&aacute;c hợp đồng th&ocirc;ng minh. Cơ sở dữ liệu tr&ecirc;n Ties DB c&oacute; thể ghi bởi bất kỳ người d&ugrave;ng n&agrave;o trong mạng. Tuy nhi&ecirc;n, c&aacute;c người d&ugrave;ng sẽ được x&aacute;c định bằng kh&oacute;a c&ocirc;ng khai của họ v&agrave; tất cả c&aacute;c y&ecirc;u cầu ghi l&ecirc;n dữ liệu đều được k&yacute; bởi chữ k&yacute; số. Sau khi dữ liệu được tạo ra, n&oacute; sẽ ghi lại th&ecirc;m cả th&ocirc;ng tin về người tạo ra n&oacute; v&agrave; người n&agrave;y sẽ được x&aacute;c định trở th&agrave;nh chủ sở hữu của dữ liệu. V&agrave; sau n&agrave;y, dữ liệu đ&oacute; chỉ c&oacute; thể được sửa đổi bởi ch&iacute;nh chủ sở hữu của n&oacute;.</p> <p style="text-align: justify;">Mọi người đều c&oacute; thể đọc tất cả c&aacute;c dữ liệu, v&igrave; cơ sở dữ liệu ở đ&acirc;y l&agrave; c&ocirc;ng khai. Tuy nhi&ecirc;n, để thực hiện c&aacute;c t&aacute;c vụ kh&aacute;c tr&ecirc;n dữ liệu th&igrave; người d&ugrave;ng sẽ phải được cấp quyền. C&aacute;c quyền bổ sung c&oacute; thể được quản l&yacute; th&ocirc;ng qua một hợp đồng th&ocirc;ng minh.</p> <p><img class=" wp-image-4980 aligncenter" src="https://tek4.vn/wp-content/uploads/2019/10/Ties-DB.png" alt="Ties DB" width="530" height="341" /></p> <h2 style="text-align: justify;">V&iacute; dụ ph&acirc;n t&iacute;ch giải ph&aacute;p lưu trữ dữ liệu blockchain cho ứng dụng quản l&yacute; hồ sơ văn bản</h2> <p>Ở phần tr&ecirc;n ch&uacute;ng ta đ&atilde; điểm qua một số giải ph&aacute;p lưu trữ dữ liệu blockchain c&oacute; thể được sử dụng. Để l&agrave;m r&otilde; hơn c&aacute;c giải ph&aacute;p tr&ecirc;n, trong phần n&agrave;y, ch&uacute;ng ta h&atilde;y c&ugrave;ng t&igrave;m hiểu một v&iacute; dụ về x&acirc;y dựng ứng dụng quản l&yacute; hồ sơ văn bản dựa tr&ecirc;n blockchain.</p> <p>N&agrave;o h&atilde;y bắt đầu!</p> <h3 style="text-align: justify;">B&agrave;i to&aacute;n quản l&yacute; hồ sơ văn bản</h3> <p style="text-align: justify;">Trong b&agrave;i n&agrave;y ch&uacute;ng ta xem x&eacute;t b&agrave;i to&aacute;n quản l&yacute; hồ sơ văn bản. B&agrave;i to&aacute;n cụ thể như sau:</p> <ul> <li style="text-align: justify;">Trong tổ chức c&oacute; rất nhiều loại hồ sơ t&agrave;i liệu, tuy nhi&ecirc;n việc đ&aacute;nh số, quản l&yacute;, ph&aacute;t h&agrave;nh văn bản cho c&aacute;c đơn vị trong tổ chức gặp rất nhiều kh&oacute; khăn, chống ch&eacute;o, đặc biệt l&agrave; khi gặp những vấn đề cập nhật bổ sung nội dung văn bản.</li> <li style="text-align: justify;">Nhiều đơn vị kh&ocirc;ng nhận được giấy tờ, hoặc thất lạc, nhiều t&agrave;i liệu được ph&aacute;t h&agrave;nh sai thẩm quyền.</li> </ul> <p style="text-align: justify;">B&agrave;i to&aacute;n đặt ra l&agrave; x&acirc;y dựng hệ thống quản l&yacute; ph&aacute;t h&agrave;nh văn bản đảm bảo t&iacute;nh kh&ocirc;ng tr&ugrave;ng lặp, ph&acirc;n quyền, tr&aacute;nh thất lạc, sửa đổi nội dung.</p> <h3>Ph&acirc;n t&iacute;ch y&ecirc;u cầu lưu trữ</h3> <p style="text-align: justify;">Trong b&agrave;i to&aacute;n tr&ecirc;n, y&ecirc;u cầu của ch&uacute;ng ta l&agrave; đảm bảo sự an to&agrave;n cho c&aacute;c văn bản. Vậy đối tượng bảo vệ ở đ&acirc;y l&agrave; th&ocirc;ng tin văn bản, c&ograve;n dữ liệu cụ thể c&oacute; thể được lưu trữ tập trung bởi một giải ph&aacute;p off-chain. Ở đ&acirc;y với dữ liệu on-chain, ch&uacute;ng ta c&oacute; thể sử dụng BigChainDB do m&ocirc; h&igrave;nh doanh nghiệp c&oacute; thể đ&aacute;p ứng được sử dụng Private chain. C&aacute;c dữ liệu (file văn bản) dạng th&ocirc; sẽ được lưu trữ tr&ecirc;n hệ thống m&aacute;y chủ dữ liệu tập trung nhằm đảm bảo t&iacute;nh sẵn s&agrave;ng li&ecirc;n tục. Ở đ&acirc;y kh&ocirc;ng sử dụng c&aacute;c hệ thống đ&aacute;m m&acirc;y do dữ liệu c&oacute; thể c&oacute; t&iacute;nh b&iacute; mật do đ&oacute; ch&uacute;ng ta kh&ocirc;ng sử dụng giải ph&aacute;p n&agrave;y. Tuy vậy, nếu ch&uacute;ng ta muốn tiết kiệm chi ph&iacute; cho m&aacute;y chủ tập trung th&igrave; đ&aacute;m m&acirc;y c&oacute; thể l&agrave; những giải ph&aacute;p c&oacute; thể được xem x&eacute;t. Để dễ d&agrave;ng truy vấn, ch&uacute;ng ta lưu trữ th&ecirc;m một số th&ocirc;ng tin cơ bản về tệp, một số đoạn t&oacute;m tắt trong cơ sở dữ liệu MongoDB.</p> <h2>Kết luận</h2> <p style="text-align: justify;">Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta đ&atilde; c&oacute; một c&aacute;i nh&igrave;n tổng quan về c&aacute;c vấn đề v&agrave; giải ph&aacute;p để lưu trữ (số lượng lớn) dữ liệu blockchain. Hi vọng rằng bạn đ&atilde; c&oacute; thể c&oacute; những &yacute; tưởng thiết kế v&agrave; sử dụng c&aacute;c hệ thống lưu trữ n&agrave;y trong c&aacute;c t&igrave;nh huống v&agrave; b&agrave;i to&aacute;n cụ thể của ri&ecirc;ng m&igrave;nh.</p> <p>Nếu bạn th&iacute;ch b&agrave;i viết n&agrave;y cũng như series b&agrave;i viết <a href="https://tek4.vn/blockchain-co-ban/">Blockchain cơ bản</a>, h&atilde;y vui l&ograve;ng chia sẻ n&oacute;!</p> <p>&nbsp;</p> <hr /> <p style="text-align: center;"><em><strong>Fanpage Facebook:</strong>&nbsp;<a href="https://www.facebook.com/tek4.vn/">TEK4.VN</a></em>&nbsp;</p> <p style="text-align: center;"><em><strong>Tham gia cộng đồng để chia sẻ, trao đổi v&agrave; thảo luận:</strong>&nbsp;<a href="https://www.facebook.com/groups/tek4.vn/">TEK4.VN - Học Lập Tr&igrave;nh Miễn Ph&iacute;</a></em></p>