Khi bạn nghe từ “blockchain”, chúng ta thường nghĩ đến các thuộc tính liên quan đến thông tin chống giả mạo, với các thuật ngữ như “immutability”, “cryptographic digests”, “cryptographic signatures”, v.v.
Do đó, khi nói đến các bảng blockchain trong database, chúng ta cần một cơ chế để lưu trữ siêu dữ liệu bổ sung đó với các hàng được lưu trữ trong bảng blockchain.
SQL>
SQL> CREATE blockchain TABLE bc1 (c1 char(10), c2 char(10))
2 no drop until 0 days idle no delete until 31 days after insert hashing using "sha2_512" version v1;
Table created.
SQL>
SQL> insert into bc1 values ('x','x');
1 row created.
SQL> select * from bc1;
C1 C2
---------- ----------
x x
SQL> commit;
Commit complete.
Khi đó, DESCRIBE hoặc là truy vấn các bảng XXX_TAB_COLS không trả về thông tin gì khác lạ
SQL> desc bc1
Name Null? Type
----------------------------- -------- -------------
C1 CHAR(10)
C2 CHAR(10)
SQL> select column_name,data_type,data_length
2 from user_tab_columns
3 where table_name = 'BC1';
COLUMN_NAME DATA_TYPE DATA_LENGTH
------------------------------ ------------------------------ -----------
C1 CHAR 10
C2 CHAR 10
nhưng danh sách thực sự của các cột cho bảng blockchain có thể được truy vấn qua USER_TAB_COLS.
SQL> select column_name,data_type,data_length
2 from user_tab_cols
3 where table_name = 'BC1';
COLUMN_NAME DATA_TYPE DATA_LENGTH
------------------------------ ------------------------------ -----------
C1 CHAR 10
C2 CHAR 10
ORABCTAB_INST_ID$ NUMBER 22
ORABCTAB_CHAIN_ID$ NUMBER 22
ORABCTAB_SEQ_NUM$ NUMBER 22
ORABCTAB_CREATION_TIME$ TIMESTAMP(6) WITH TIME ZONE 13
ORABCTAB_USER_NUMBER$ NUMBER 22
ORABCTAB_HASH$ RAW 2000
ORABCTAB_SIGNATURE$ RAW 2000
ORABCTAB_SIGNATURE_ALG$ NUMBER 22
ORABCTAB_SIGNATURE_CERT$ RAW 16
ORABCTAB_SPARE$ RAW 2000
Các bảng blockchain sẽ cho hiệu suất hoàn toàn tốt giống như bất kỳ bảng heap nào khác trong cơ sở dữ liệu Oracle.
Chúng ta hãy bắt đầu thử với một bảng blockchain như sau:
SQL> CREATE blockchain TABLE bc1 (c1 char(10), c2 char(10))
2 no drop until 0 days idle no delete until 31 days after insert hashing using "sha2_512" version v1;
Table created.
SQL> insert into bc1 values ('x','y');
1 row created.
Không giống như các cột thông thường, các cột dữ liệu blockchain không được insert dữ liệu vào
SQL> select
2 ORABCTAB_SEQ_NUM$
3 ,ORABCTAB_SPARE$
4 ,ORABCTAB_USER_NUMBER$
5 ,ORABCTAB_HASH$
6 ,ORABCTAB_SIGNATURE$
7 ,ORABCTAB_SIGNATURE_ALG$
8 ,ORABCTAB_SIGNATURE_CERT$
9 ,ORABCTAB_CHAIN_ID$
10 ,ORABCTAB_INST_ID$
11 ,ORABCTAB_CREATION_TIME$
12 from bc1
13 @pr
==============================
ORABCTAB_SEQ_NUM$ :
ORABCTAB_SPARE$ :
ORABCTAB_USER_NUMBER$ :
ORABCTAB_HASH$ :
ORABCTAB_SIGNATURE$ :
ORABCTAB_SIGNATURE_ALG$ :
ORABCTAB_SIGNATURE_CERT$ :
ORABCTAB_CHAIN_ID$ :
ORABCTAB_INST_ID$ :
ORABCTAB_CREATION_TIME$ :
PL/SQL procedure successfully completed.
Các cột này chỉ được điền khi kết thúc giao dịch:
SQL> commit;
Commit complete.
SQL> select
2 ORABCTAB_SEQ_NUM$
3 ,ORABCTAB_SPARE$
4 ,ORABCTAB_USER_NUMBER$
5 ,ORABCTAB_HASH$
6 ,ORABCTAB_SIGNATURE$
7 ,ORABCTAB_SIGNATURE_ALG$
8 ,ORABCTAB_SIGNATURE_CERT$
9 ,ORABCTAB_CHAIN_ID$
10 ,ORABCTAB_INST_ID$
11 ,ORABCTAB_CREATION_TIME$
12 from bc1
13 @pr
==============================
ORABCTAB_SEQ_NUM$ : 1
ORABCTAB_SPARE$ :
ORABCTAB_USER_NUMBER$ : 107
ORABCTAB_HASH$ :
0924C163458DE1FA3A7FFEA38ADA1852A409ADBF859A453E83A429BE3DB9F119C28828FFDB7BD101C5695C9CFCD82364F0B933B1E442B3CFCDE037D20CFDB631
ORABCTAB_SIGNATURE$ :
ORABCTAB_SIGNATURE_ALG$ :
ORABCTAB_SIGNATURE_CERT$ :
ORABCTAB_CHAIN_ID$ : 18
ORABCTAB_INST_ID$ : 1
ORABCTAB_CREATION_TIME$ : 30-JUL-21 06.04.12.738166 AM +00:00
PL/SQL procedure successfully completed.
Đây là điều mà bạn có thể sẽ không bao giờ nhận thấy vì phần lớn các trường hợp sử dụng cho các bảng blockchain là kiểu hoạt động điển hình của OLTP nơi các giao dịch có thời lượng nhỏ và tần suất cao.
Leave a Review