ืืืื
"ืืชื ืฆืจืื ืืจืืฅ ืืื ืืืจ ืฉืืชื ืืืื ืจืง ืืื ืืืืฉืืจ ืืืงืื,
ืืืื ืืืืืข ืืืงืื, ืืชื ืฆืจืื ืืจืืฅ ืืคืืืช ืคื ืฉื ืืื ืืืจ ืืืชืจ!"
(ื) ืขืืืกื ืืืจืฅ ืืคืืืืช
ืืคื ื ืืื ืื ืืชืืงืฉืชื ืืชืช ืืจืฆืื ืื ืืืกืืื ืืืืจื ืฉืื ื ืื ืืฉื ืขืืฆืื ืืืืืื ืฉื ื ืชืื ืื, ืื ืืฉืืืฉืืื ืขื ืคืจืืืงืืื ืืืฉื ืืื ืจื (ืืคืขืืื ืืกืคืจ ืฉื ืื) ืื ืื ื ืืืืืื ืืช ืืืชืจืืฉ ืกืืืื ื ืืขืืื ืืื ืืืืืืืช ื-IT. ืืืืจื ืฉืื ื (ืื ืงืืจื) ืืจืื ืคืจืืืงืืื ืื ืืฉืชืืฉืื ืืืกืื ื ืชืื ืื ืฉื NoSQL (ืืคืืืช ืืื ืชืืื), ืื ืืืจืฆืื ืฉืื ืืงืืฉืชื ืืื ืชืฉืืืช ืื ืื ืคืจื ืืืืฆืขืืช ืืืืืื ืฉื HBase ืื ืืกืืชื ืืืืื ืืช ืืฆืืช ืืืืืจ ืืืื ืฉืืขืืื ืื ืืฉืชืืฉื ืืื ืขืืื. ืืืืืื, ืืืืืชื ืืื ืืืชืืื ืืช ืฉื ืขืืฆืื ืืืื ื ืชืื ืื ืืืืฆืขืืช ืืืืื ืฉืงืจืืชื ืืคื ื ืืกืคืจ ืฉื ืื
ืืืืจืื ื, "ืืฉ ืื ืืขืฉืืช", ืฉืืืชื ืืช ืขืฆืื ืืช ืืฉืืื (ืกืืฃ ืืฉืืืข ืืืจืื ืฉื ืืื ืืืกืืจ ืชืืจื ืืื ืืืืืื), ืขื ืืื ืืชืืืื ืืืฉืืืื ืชืืืืจืืืื ืืคืจืงืืืงื? ืืืขืฉื, ืื ื ืืื ืืจืขืืื ืืืืืจ ืื. ืืคืชื ืฉืขืืื ืขื NoSQL ืืืจ ืืกืคืจ ืืืื ืขืืื ืฉืื ืืืืื ืืื ื ืฉืื ืืืจ ืืืฉ (ืืืื ืขืืื ืืืื ืืื ืขื ืืฆื ืืืืืจ). ืืื ืืฉืืื ืื ืืืกืืืืขืืืจ ืืื ืฉืขืืืื ืื ืขืืื ืืฉืืชืืฃ ืคืขืืื ืืืืง ืขื NoSQL, ืื ื ืืืฉื ืฉืื ืืืื ืฉืืืืฉื ืืืฉืืช ืืื ื ืืกืืกืืช ืฉื ืืชืืื ืืช ืฉื ืขืืฆืื ืืืืืื ืฉื ื ืชืื ืื ืขืืืจ HBase.
ื ืืชืื ืืืืื
ืืืขืชื, ืืคื ื ืฉืืชืืืืื ืืืฉืชืืฉ ืืืกืืกื ื ืชืื ืื ืฉื NoSQL, ืฆืจืื ืืืฉืื ืืืื ืืืฉืงืื ืืช ืืืชืจืื ืืช ืืืืกืจืื ืืช. ืืขืชืื ืงืจืืืืช ื ืืชื ืืคืชืืจ ืืช ืืืขืื ืืืืฆืขืืช DBMS ืืืกืื ืืกืืจืชืืื. ืืื, ืขืืืฃ ืื ืืืฉืชืืฉ ื-NoSQL ืืื ืกืืืืช ืืฉืืขืืชืืืช. ืื ืืื ืืืช ืืืืืชื ืืืฉืชืืฉ ืืืกื ื ืชืื ืื NoSQL, ืื ืืืื ืืงืืช ืืืฉืืื ืฉืืืฉืืช ืืขืืฆืื ืืื ืฉืื ืืช ืืืงืฆืช. ืืืืืื ืืืงื ืขืฉืืืื ืืืืืช ืืืฆืื ืืืคื ืขืืืจ ืื ืฉืขืกืง ืืขืืจ ืจืง ื-DBMSs ืืืกื (ืืคื ืืชืฆืคืืืช ืฉืื). ืืื, ืืขืืื ื"ืืืกื", ืื ืื ื ืืืจื ืืื ืืชืืืืื ืืืืืืื ืฉื ืชืืื ืืืขืื, ืืจืง ืื, ืืืืืช ืืฆืืจื, ืื ืืจืืื ืืช ืืืืื. ื-NoSQL ืื ืื ื ืฆืจืื ืืงืืช ืืืฉืืื ืืื ืืช ืืชืจืืืฉืื ืืฆืคืืืื ืืขืืืื ืขื ื ืชืื ืื ืืืืชืืื ืืืื ืืช ืื ืชืื ืื. ืื ืืกืฃ, ืืฉื ื ืืกืคืจ ืืืืืื ื ืืกืคืื, ืขืืืื ืืืืื ื ืืืื.
ืืื ื ืฉืงืื ืืช ืืืขืื ื"ืกืื ืืืืช" ืืืื, ืืืชื ื ืืฉืื ืืขืืื:
ืืฉ ืฆืืจื ืืขืฆื ืืื ื ืืืกืื ืขืืืจ ืจืฉืืืช ืืืืจืื ืฉื ืืืฉืชืืฉืื ืืจืฉืช ืืืจืชืืช ืืืคืฉืืช ืืืฉืื. ืืื ืืคืฉื, ื ื ืื ืฉืื ืืงืฉืจืื ืฉืื ื ืืืืื ืื (ืืื ืืืื ืกืืืจื, ืื ืืืื ืงืืื). ืืืื ื ืืืืจ ืืืคืฉืจ ืื ืืืขืืืืช:
- ืขื ื ืขื ืืฉืืื ืืื ืืฉืชืืฉ ื' ืงืืจื ืืช ืืฉืชืืฉ ื' (ืืคืืก ืงืจืืื)
- ืืคืฉืจ ืืืกืคื/ืืกืจื ืฉื ืืืืืจืื ืืืงืจื ืฉื ืืจืฉืื/ืืืืื ืื ืื ืฉื ืืฉืชืืฉ ื' ืืืฉืชืืฉ ื' (ืชืื ืืช ืฉืื ืื ื ืชืื ืื)
ืืืืื, ืืฉื ื ืืคืฉืจืืืืช ืจืืืช ืืคืชืจืื ืืืขืื. ืืืกื ื ืชืื ืื ืจืืฆืืื ื ืจืืื, ืกืืืจ ืืื ืื ืฉืืืื ื ืคืฉืื ืืืื ืื ืืืืช ืืขืจืืืช ืืืกืื (ืืืื ืืืืคืืื ืช ืื, ืืืฉื, ืขืืื ื ืืืืกื ืงืืืฆืช ืืฉืชืืฉืื: ืืฉืคืื, ืขืืืื ืืื', ืืืืืืช ืืช ื"ืืืจ") ืืื, ืืืื ืืืฆืข ืืืคืืืืืืฆืื ืืืืจืืช ืืืืฉื ืชืืกืืฃ ืืื ืืงืกืื/ืืืืงื ืืืืืฆืืช. ืกืืืจ ืืื ืื ืฉืืฉืืืื ืืืืจ ืืืจืื ืืขืจื ืื:
USER_ID
ืืืจ_ืืืื
ืืกืื
ืคืืื
ืืกืื
ะะปั
ืืืื, ืืฆืืจื ืืืืืจืืช ืืืื ื ืืืื ืืืชืจ, ืืฆืืื ืฉืืืช ืืืงืื ืชืขืืืืช ืืืืช
ืืืงืจื ืฉื HBase, ืื ื ืืืืขืื ืฉ:
- ืืืคืืฉ ืืขืื ืฉืืื ื ืืืื ืืกืจืืงืช ืืืื ืืืื ืืคืฉืจื ืื ืืจืง ืืคื ืืคืชื
- ืืืขืฉื, ืื ืืกืืื ืฉืืชืืืช ืฉืืืืชืืช SQL ืืืืืจืืช ืืจืืื ืืืกืืกื ื ืชืื ืื ืืืื ืืื ืจืขืืื ืจืข; ืืืืื ื ืืื ืืช, ืืืืื, ืืชื ืืืื ืืฉืืื ืฉืืืืชืช SQL ืขื Joins ืืืืืืื ืืืจ ื-HBase ืืืืชื ืืืืคืื, ืืื ืืื ืื ืืืื ืืขืื...
ืืื, ืื ื ื ืืืฆืื ืืืฉืชืืฉ ืืืืื ืืืฉืชืืฉ ืืืคืชื. ืืืืืฉืื ืืจืืฉืื ื ืฉืื ืขื ืื ืืฉื "ืืืื ืืืื ืืืืกื ืชืขืืืืช ืืืืช ืฉื ืืืจืื?" ืืืื ืจืขืืื ืืืืกื ืืืชื ืืืืจืื. ืืืคืฉืจืืช ืืืจืืจื ืื"ื ืืืืืช" ืืื ืชืืจืื ืืฉืื ืืื (ืืื ื ืงืจื ืืื ืืคืฉืจืืช 1 (ืืจืืจืช ืืืื)ืืขืืื ื ืืกืฃ):
RowKey
ืจืืงืืืื
ืืกืื
1: ืคืืื
2: ืืืืื
3: ืืืฉื
ืคืืื
1: ืืืฉื
2: ืืืกืื
ืืื, ืื ืฉืืจื ืืชืืืื ืืืฉืชืืฉ ืจืฉืช ืืื. ืืขืืืืืช ืืฉ ืฉืืืช: 1, 2, ... - ืืคื ืืกืคืจ ืืืืจืื, ืืืขืืืืืช ืฉืืืจืื ืชืขืืืืช ืืืืืช ืฉื ืืืืจืื. ืืฉืื ืืฆืืื ืฉืืื ืฉืืจื ืืืื ืืกืคืจ ืฉืื ื ืฉื ืขืืืืืช. ืืืืืื ืืืืืจ ืืืขืื, ืืฉืืจื ืืืช ืืฉ ืฉืืืฉ ืขืืืืืช (1, 2 ื-3), ืืืฉื ืืื ืืฉ ืจืง ืฉืชืืื (1 ื-2) - ืืื ืืฉืชืืฉื ื ืืขืฆืื ื ืืฉื ื ืืืคืืื ื HBase ืฉืืื ืืืกืืกื ื ืชืื ืื ืืืกืืื:
- ืืืืืืช ืืฉื ืืช ืืืืคื ืืื ืื ืืช ืืจืื ืืขืืืืืช (ืืืกืฃ ืืืจ -> ืืืกืฃ ืขืืืื, ืืกืจืช ืืืจ -> ืืืืงืช ืขืืืื)
- ืืฉืืจืืช ืฉืื ืืช ืขืฉืืืืช ืืืืืช ืืจืื ืขืืืืืช ืฉืื ื
ืืืื ื ืืืืง ืืช ืืืื ื ืฉืื ื ืืขืืืื ืืืจืืฉืืช ืืืฉืืื:
- ืงืจืืืช ื ืชืื ืื: ืืื ืืืืื ืื Vasya ืื ืื ืืืืืื, ื ืฆืืจื ืืืืกืืจ ืืช ืื ืืงื ืขื ืืื ืืืคืชื RowKey = "Vasya" ืืืืืื ืืช ืขืจืื ืืขืืืืืช ืขื ืฉ"ื ืคืืืฉ" ืืื Olya. ืื ืืืืืจ ืขื ืืขืจืืื ืฉื ืื ืืขืืืืืช, "ืื ืืคืืืฉ" ืืช ืืืืื ืืืืืืืจ ืืช ืืชืฉืืื False;
- ืขืจืืืช ื ืชืื ืื: ืืืกืคืช ืืืจ: ืขืืืจ ืืฉืืื ืืืื ืื ืื ื ืฆืจืืืื ืื ืืืืกืืจ ืืช ืื ืืงื ืืืืฆืขืืช ืืืงืฉ RowKey = "Vasya" ืืื ืืืฉื ืืช ืืืกืคืจ ืืืืื ืฉื ืืืจืื. ืื ืื ื ืฆืจืืืื ืืช ืืืกืคืจ ืืืืื ืืื ืฉื ืืืจืื ืืื ืืงืืืข ืืช ืืกืคืจ ืืขืืืื ืฉืื ืื ืื ื ืฆืจืืืื ืืจืฉืื ืืช ืชืขืืืช ืืืืืช ืฉื ืืืืจ ืืืืฉ.
- ืฉืื ืื ื ืชืื ืื: ืืืืงืช ืืืจ:
- ืฆืจืื ืืืืกืืจ ืืช ืื ืืงื ืขื ืืื ืืืงืฉ RowKey = "Vasya" ืืืืื ืืื ืืขืืืืืช ืขื ืื ืช ืืืฆืื ืืช ืื ืฉืื ืจืฉืื ืืืืจ ืฉืืืืืง;
- ืืืืจ ืืื, ืืืืจ ืืืืงืช ืืืจ, ืขืืื ื "ืืืขืืืจ" ืืช ืื ืื ืชืื ืื ืืขืืืื ืืืช ืืื ืื ืืงืื "ืคืขืจืื" ืืืกืคืืจ ืฉืืื.
ืืขืช ื ืขืจืื ืขื ืืื ืืืืืืจืืชืืื ืืืื, ืืืชื ื ืฆืืจื ืืืืฉื ืืฆื "ืืืืฉืื ืืืืชื ื", ืืืื ืคืจืืืืงืืืืืื, ืืืืฆืขืืช
- ืงืจืืืช ื ืชืื ืื: ืืฉ ืฆืืจื ืืืืกืืจ ืืช ืื ืืฉืืจื ืืืืืืจ ืขื ืื ืืขืืืืืช ืฉืื ืืืืื. ืืืฉืืขืืช ืืื ืฉืืืืืื ืืขืืืื ืฉื ืืขืืืืืช ืืืื ืืขืจื O(n)
- ืขืจืืืช ื ืชืื ืื: ืืืกืคืช ืืืจ: ืืื ืืงืืืข ืืช ืืกืคืจ ืืืืจืื, ืขืืื ืืขืืืจ ืขื ืื ืืขืืืืืช ืฉื ืืฉืืจื, ืืืืืจ ืืื ืืืืกืืฃ ืขืืืื ืืืฉื => O(n)
- ืฉืื ืื ื ืชืื ืื: ืืืืงืช ืืืจ:
- ืืืืื ืืืืกืคื - ืฆืจืื ืืขืืืจ ืขื ืื ืืขืืืืืช ืืืืื => O(n)
- ืืืืจ ืืกืจืช ืืขืืืืืช, ืขืืื ื "ืืืืื" ืืืชื. ืื ืืชื ืืืืฉื ืืช ื"ืืืืช", ืื ืืืืืื ืชืฆืืจื ืขื (n-1) ืคืขืืืืช. ืืื ืืื ืืืืืฉื ืืืืง ืืืขืฉื ื ืฉืชืืฉ ืืืืฉื ืืืจืช, ืฉืชืืืืข "ืคืกืืืื-ืฉืืคื" ืืืกืคืจ ืงืืืข ืฉื ืคืขืืืืช - ืืืืืจ, ืืืฉืงืข ืื ืืื ืงืืืข, ืืื ืงืฉืจ ื-n. ื ืืชื ืืืื ืื ืืช ืืืื ืืงืืืข ืืื (O(2) ืืืชืจ ืืืืง) ืืืฉืืืื ื-O(n). ืืืืฉื ืืืืืฉืช ืืืืืจ ืฉืืืื: ืื ื ืคืฉืื ืืขืชืืงืื ืืช ืื ืชืื ืื ืืืขืืืื "ืืืืจืื ื" ืืื ืฉืืื ื ืื ื ืจืืฆืื ืืืืืง ื ืชืื ืื, ืืืืืจ ืืื ืืืืงืื ืืช ืืขืืืื ืืืืจืื ื:
ืืกื ืืื, ืืื ืืชืจืืืฉืื ืงืืืื ื ืืืจืืืืช ืืืฉืืืืช ืืกืืืคืืืืืช ืฉื O(n).
ืืื ืืืจ ืฉืืชื ืื ืฉืืืขื ืชืืื ืื ืื ื ืฆืจืืืื ืืงืจืื ืืช ืื ืืฉืืจื ืืืืืืจ, ืืืฉื ื ืืงืจืื ืืชืื ืฉืืืฉื, ืจืง ืืื ืืขืืืจ ืขื ืื ืืขืืืืืช ืืืืฉื ืืช ืกื ืืืืจืื. ืืื, ืื ืืกืืื ืืืืคืืืืืืฆืื, ื ืืชื ืืืืกืืฃ ืขืืืืช "ืกืคืืจื", ืืืืืกื ืช ืืช ืืกืคืจ ืืืืจืื ืืืืื ืฉื ืื ืืฉืชืืฉ ืืจืฉืช. ืืืงืจื ืื, ืืื ื ื ืืืืืื ืืงืจืื ืืช ืื ืืฉืืจื ืืื ืืืฉื ืืช ืืืกืคืจ ืืืืื ืฉื ืืืจืื, ืืื ืืงืจืื ืจืง ืขืืืืช "ืกืคืืจื" ืืืช. ืืขืืงืจ ืื ืืฉืืื ืืขืืื "ืกืคืืจื" ืืขืช ืื ืืคืืืฆืื ืฉื ื ืชืื ืื. ืึถื. ืื ืื ื ืืฉืชืคืจืื ืืคืฉืจืืช 2 (ืกืคืืจื):
RowKey
ืจืืงืืืื
ืืกืื
1: ืคืืื
2: ืืืืื
3: ืืืฉื
ืกืคืืจื: 3
ืคืืื
1: ืืืฉื
2: ืืืกืื
ืกืคืืจื: 2
ืืืฉืืืื ืืืืคืฆืื ืืจืืฉืื ื:
- ืงืจืืืช ื ืชืื ืื: ืืื ืืงืื ืชืฉืืื ืืฉืืื "ืืื ืืืกืื ืงืืจื ืืช ืืืืื?" ืฉืื ืืืจ ืื ืืฉืชื ื => O(n)
- ืขืจืืืช ื ืชืื ืื: ืืืกืคืช ืืืจ: ืคืืฉืื ื ืืช ืืื ืกืช ืืืจ ืืืฉ, ืืืืืื ืฉืืขืช ืืื ืฆืืจื ืืงืจืื ืืช ืื ืืฉืืจื ืืืืืืจ ืขื ืืขืืืืืช ืฉืื, ืืื ืจืง ืืงืื ืืช ืืขืจื ืฉื ืืขืืืื "ืกืคืืจื" ืืื'. ืงืืข ืืื ืืช ืืกืคืจ ืืขืืืื ืืื ืืืืกืืฃ ืืืจ ืืืฉ. ืื ืืืืื ืืืคืืชื ืืืืจืืืืช ืืืืฉืืืืช ื-O(1)
- ืฉืื ืื ื ืชืื ืื: ืืืืงืช ืืืจ: ืืขืช ืืืืงืช ืืืจ, ื ืืื ืืืฉืชืืฉ ืืขืืืื ืื ืื ืืื ืืืคืืืช ืืช ืืกืคืจ ืคืขืืืืช ื-I/O ืืขืช "ืืืืช" ืื ืชืื ืื ืชื ืืื ืฉืืืื. ืืื ืืฆืืจื ืืืืืจ ืขื ืืขืืืืืช ืืื ืืืฆืื ืืช ืื ืฉืฆืจืื ืืืืืง ืขืืืื ื ืฉืืจ, ืื => O(n)
- ืืฆื ืฉื ื, ืขืืฉืื ืืฉืืขืืื ืื ื ืชืื ืื ืื ืื ื ืฆืจืืืื ืืขืืื ืืช ืขืืืืช ื"ืกืคืืจื" ืื ืคืขื, ืืื ืื ืืืงื ืืื ืงืืืข, ืฉื ืืชื ืืืื ืื ืืืกืืจืช ืฉื ืกืืื O
ืืืืคื ืืืื, ืืคืฉืจืืช 2 ื ืจืืืช ืงืฆืช ืืืชืจ ืืืคืืืืืืช, ืืื ืืื ืืืชืจ ืืื "ืืืืืืฆืื ืืืงืื ืืืคืื". ืืื ืืขืฉืืช "ืืืคืื" ื ืฆืืจื ืืคืฉืจืืช 3 (ืงืื).
ืืืื ื ืืคืื ืืื "ืขื ืืคืื": ืื ืื ื ื ืื ื ืฉื ืขืืืื ืืืื ืืฉืชืืฉ! ืื ืฉืืืชืื ืืขืืืื ืขืฆืื ืืืจ ืื ืืฉืื ืื ื, ืฉืืืื ืืืกืคืจ 1 (ืืืืคื ืืืื ืืคืฉืจ ืืืืกื ืฉื ืืืจืื ืฉืืืืฉืืื, ืืืฉื ืงืืืฆืช "ืืฉืคืื/ืืืจืื/ืืื'"). ืืืฉื ืื ืขืฉืืื ืืืคืชืืข ืืช "ืืืืื" ืืื ืืืื, ืฉืืื ืื ื ืืกืืื ืงืืื ืืขืืืื ืขื ืืกืื ื ืชืื ืื ืฉื NoSQL, ืืื ืืืืงื ืืืืฉื ืืื ืืืคืฉืจืช ืื ืืืฉืชืืฉ ืืคืืื ืฆืืื ืฉื HBase ืืืฉืืื ืืื ืืฆืืจื ืืจืื ืืืชืจ ืืขืืื:
RowKey
ืจืืงืืืื
ืืกืื
ืคืืื: 1
ืืืืื: 1
ืืืฉื: 1
ืคืืื
ืืืฉื: 1
ืืืกืื: 1
ืืื ืื ื ืืงืืืื ืืกืคืจ ืืชืจืื ืืช ืืืช ืืืช. ืืื ืืืืื ืืืชื, ืืืื ื ื ืชื ืืช ืืืื ื ืืืืฉ ืื ืขืจืื ืืช ืืืืจืืืืช ืืืืฉืืืืช:
- ืงืจืืืช ื ืชืื ืื: ืืื ืืขื ืืช ืขื ืืฉืืื ืื ืืืกืื ืื ืื ืืืืืื, ืืกืคืืง ืืงืจืื ืืืจ ืืื "ืืืืื": ืื ืืื ืงืืื, ืื ืืชืฉืืื ืืื ืืืช, ืื ืื - ืื ื ืืื => O(1)
- ืขืจืืืช ื ืชืื ืื: ืืืกืคืช ืืืจ: ืืืกืคืช ืืืจ: ืคืฉืื ืืืกืฃ ืขืืืื ืืืฉื "ืืืื ืืืจ" => O(1)
- ืฉืื ืื ื ืชืื ืื: ืืืืงืช ืืืจ: ืคืฉืื ืืกืจ ืืช ืืขืืืื ืืืื ืืืจ => O(1)
ืืคื ืฉื ืืชื ืืจืืืช, ืืชืจืื ืืฉืืขืืชื ืฉื ืืืื ืืืืกืื ืืื ืืื ืฉืืื ืืชืจืืืฉืื ืฉืื ื ืฆืจืืืื, ืื ื ืคืืขืืื ืขื ืขืืืื ืืืช ืืืื, ื ืื ืขืื ืืงืจืืืช ืื ืืฉืืจื ืืืกื ืื ืชืื ืื ืืืชืจื ืืื, ืืื ืืช ืืช ืื ืืขืืืืืช ืฉื ืฉืืจื ืื. ืืืืื ื ืืขืฆืืจ ืฉื, ืืื...
ืืชื ืืืื ืืืืืช ืืืืืื ืืืืืช ืขืื ืงืฆืช ืืืจื ืฉื ืืืคืืืืืืฆืื ืฉื ืืืฆืืขืื ืืืคืืชืช ืคืขืืืืช I/O ืืขืช ืืืฉื ืืืกื ืื ืชืื ืื. ืื ืื ืืืกื ื ืืช ืคืจืื ืืงืฉืจ ืืืื ืืฉืืจืืช ืืืงืฉ ืืฉืืจื ืขืฆืื? ืืืืืจ, ืืืคืื ืืช ืืืคืชื ืืจืื ืืื userID.friendID? ืืืงืจื ืื, ืื ืื ื ืืคืืื ืื ืฆืจืืืื ืืงืจืื ืืช ืขืืืืืช ืืฉืืจื ืืืื (ืืคืฉืจืืช 4 (ืฉืืจื)):
RowKey
ืจืืงืืืื
Vasya.Petya
ืคืืื: 1
Vasya.Olya
ืืืืื: 1
ืืืกืื.ืืืฉื
ืืืฉื: 1
ืคืืื.ืืืฉื
ืืืฉื: 1
Petya.Vasya
ืืืกืื: 1
ืืจืืจ ืฉืืืขืจืื ืฉื ืื ืชืจืืืฉื ืื ืืคืืืฆืืืช ืื ืชืื ืื ืืืื ื ืืื, ืืื ืืืจืกื ืืงืืืืช, ืชืืื O(1). ืืืืื ืขื ืืคืฉืจืืช 3 ืืืื ืื ืืจืง ืืืขืืืืช ืคืขืืืืช ื-I/O ืืืกื ืื ืชืื ืื.
ืืืื, ื"ืงืืื" ืืืืจืื ื. ืงื ืืจืืืช ืฉืืืืคืฆืื 4, ืืืคืชื ืืฉืืจื ืืืื ืืืจื ืืฉืชื ื, ืื ืฉืขืฉืื ืืืฉืคืืข ืขื ืืืืฆืืขืื (ืืื ืื ื ืืืืจืื ืฉ-HBase ืืืืกื ื ืชืื ืื ืืกื ืฉื ืืชืื ืืฉืืจืืช ืืืืืืืช ืืืืื ืืช ืืคื ืืคืชื). ืื ืืกืฃ ืืฉ ืื ื ืืคืจืื ืฉืืืื ืฆืจืื ืืืคื ืื ืืชืจืืืฉืื ืืกืืืืื. ืืื ืืืื ืืช ืืืฉืคืขื ืืื, ืืชื ืืืื ืืืฉืชืืฉ ื-hash ื-userID ื-friendID, ืืืืืืื ืฉืืฉื ื ืืืืืืืื ืืืื ืืืจื ืงืืืข, ืืชื ืืืื ืคืฉืื ืืฉืจืฉืจ ืืืชื, ืืื ืืคืจืื. ืืื ืื ืชืื ืื ืืืืื ืืืจืื ืื (ืืคืฉืจืืช 5 (hash)):
RowKey
ืจืืงืืืื
dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
ืคืืื: 1
dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
ืืืืื: 1
dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
ืืืฉื: 1
1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
ืืืฉื: 1
1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
ืืืกืื: 1
ืืจืืจ ืฉืืืืจืืืืช ืืืืืืจืืชืืืช ืฉื ืขืืืื ืขื ืืื ื ืืื ืืชืจืืืฉืื ืฉืื ื ืฉืืงืืื ืชืืื ืืื ืืื ืฉื ืืคืฉืจืืช 4 - ืืืืืจ O(1).
ืืกื ืืื, ืืืื ื ืกืื ืืช ืื ืืืขืจืืืช ืฉืื ื ืืืื ืืืจืืืืช ืืืฉืืืืช ืืืืื ืืืช:
ืืืกืคืช ืืืจ
ืืืืง ืืืจ
ืืกืจืช ืืืจ
ืืคืฉืจืืช 1 (ืืจืืจืช ืืืื)
O (n)
O (n)
O (n)
ืืคืฉืจืืช 2 (ืกืคืืจื)
O (1)
O (n)
O (n)
ืืคืฉืจืืช 3 (ืขืืืื)
O (1)
O (1)
O (1)
ืืคืฉืจืืช 4 (ืฉืืจื)
O (1)
O (1)
O (1)
ืืคืฉืจืืช 5 (hash)
O (1)
O (1)
O (1)
ืืคื ืฉืืชื ืืืื ืืจืืืช, ื ืจืื ืฉืืืคืฉืจืืืืช 3-5 ืื ืืืืขืืคืืช ืืืืชืจ ืืืืืืืืช ืืืืคื ืชืืืืจืื ืืช ืืืฆืืข ืื ืชืจืืืฉื ืื ืืคืืืฆืืืช ืื ืชืื ืื ืืืจืืฉืื ืืืื ืงืืืข. ืืชื ืื ืืืฉืืื ืฉืื ื, ืืื ืืจืืฉื ืืคืืจืฉืช ืืืฉืื ืจืฉืืื ืฉื ืื ืืืืจืื ืฉื ืืืฉืชืืฉ, ืืื ืืคืขืืืืช ืคืจืืืงื ืืืืชืืช, ืืื ืื ื, ืืื ืืืกืืื ืืืืื, "ืืฆืคืืช" ืฉืืฉืืื ืืื ืขืืืื ืืืชืขืืจืจ. "ืืคืืจ ืงืฉ." ืืื, ืืืืื ืฉืื ืืื ืืฆื ืฉื ืืคืฉืจืืช 3. ืืื ืกืืืจ ืืืืื ืฉืืคืจืืืงื ืืืืชื ืืืจ ื ืืชื ืืื ืืคืชืืจ ืืช ืืืงืฉื ืืื ืืืืฆืขืื ืืืจืื, ืืืื, ืืื ืจืืืื ืืืืืช ืฉื ืืืขืื ืืืื, ืขืืืฃ ืื ืืขืฉืืช ืืกืงื ืืช ืกืืคืืืช.
ืืื ืช ืื ืืกืื
ืืจืฆืื ื ืืืืื ืืคืืขื ืืช ืืืืขืื ืื ืืชืืืืจืืืื ืื "ื - ืื ืืืืชื ืืืจืช ืืจืขืืื ืฉืขืื ืืกืืฃ ืืฉืืืข ืืืจืื. ืืฉื ืื, ืืฉ ืฆืืจื ืืืขืจืื ืืช ืืืืจืืช ืืคืขืืื ืฉื "ืืืคืืืงืฆืื ืืืืชื ืืช" ืฉืื ื ืืื ืืชืจืืืฉืื ืืืชืืืจืื ืืฉืืืืฉ ืืืกื ืื ืชืื ืื, ืืื ืื ืืช ืืขืืืื ืืืื ืืื ืขื ืืืืืช ืืืืื ืฉื ืืจืฉืช ืืืืจืชืืช (n). ืคืจืืืจ ืืืขื ืฉืืขื ืืื ืืืชื ื ืืฉื ืืืื ืืืืื ืื ืืกืื ืืื ืืฉื ืืืื ืฉื "ืืืคืืืงืฆืื ืืืืชื ืืช" ืืืืฆืืข "ืคืขืืื ืขืกืงืืช" ืืืช. ื"ืขืกืงื ืขืกืงืืช" ืื ื ืืชืืืื ืื ืืืื ืืืืืื:
- ืืืกืคืช ืืืจ ืืืฉ ืืื
- ืืืืงื ืื ืืฉืชืืฉ ื' ืืื ืืืจ ืฉื ืืฉืชืืฉ ื'
- ืืกืจืช ืืืจ ืืื
ืืคืืื, ืืืชืืฉื ืืืจืืฉืืช ืืืคืืจืืืช ืืืฆืืจื ืืจืืฉืื ืืช, ืชืจืืืฉ ืืืืืืช ืืืคืืข ืืืืงืื:
- ืจืืฉืื ื ืชืื ืื. ืฆืืจ ืืืืคื ืืงืจืื ืจืฉืช ืจืืฉืื ืืช ืืืืื n. ืืื ืืืชืงืจื ื"ืขืืื ืืืืืชื", ืืกืคืจ ืืืืจืื ืฉืืฉ ืืื ืืฉืชืืฉ ืืื ืื ืืฉืชื ื ืืงืจืื. ืืืื ืืช ืืืื ืฉืืืืืื "ืืืคืืืงืฆืื ืืืืชื ืืช" ืฉืื ื ืืืชืืช ืืช ืื ืื ืชืื ืื ืฉื ืืฆืจื ื-HBase. ืืืืจ ืืื ืืืงื ืืช ืืืื ืืืชืงืื ืืืกืคืจ ืืืืื ืฉื ืืืจืื ืฉื ืืกืคื - ืื ื ืงืื ืืช ืืืื ืืืืืฆืข ืขืืืจ "ืคืขืืื ืขืกืงืืช" ืืืช
- ืงืจืืืช ื ืชืื ืื. ืขืืืจ ืื ืืฉืชืืฉ, ืฆืืจ ืจืฉืืื ืฉื "ืืืฉืื" ืขืืืจื ืืชื ืฆืจืื ืืงืื ืชืฉืืื ืื ืืืฉืชืืฉ ืื ืื ืืืืื ืื ืื. ืืืจื ืืจืฉืืื = ืืขืจื ืืกืคืจ ืืืืจืื ืฉื ืืืฉืชืืฉ, ืืืืืฆืืช ืืืืืจืื ืืืกืืื ืื ืืชืฉืืื ืฆืจืืื ืืืืืช "ืื", ืืืืฆื ืืฉื ื - "ืื". ืืืืืงื ืืชืืฆืขืช ืืกืืจ ืืื ืฉืืชืฉืืืืช "ืื" ื"ืื" ืืชืืืคืืช (ืืืืืจ, ืืื ืืงืจื ืฉื ื ื ืฆืืจื ืืขืืืจ ืขื ืื ืขืืืืืช ืืฉืืจื ืืืคืฉืจืืืืช 1 ื-2). ืืืืจ ืืื, ืืื ืืืงืจื ื ืืืืื ืืืืืง ืืืกืคืจ ืืืืจืื ืฉื ืืืงื ืืื ืืงืื ืืช ืืื ืืืงืจื ื ืืืืืฆืข ืืื ื ืืืง.
- ืืืืงืช ื ืชืื ืื. ืืกืจ ืืช ืื ืืืืจืื ืืืืฉืชืืฉ. ืืชืจื ืืื, ืกืืจ ืืืืืงื ืืื ืืงืจืื (ืืืืืจ, ืื ื "ืืขืจืืืื" ืืช ืืจืฉืืื ืืืงืืจืืช ืฉืฉืืืฉื ืืจืืฉืื ืื ืชืื ืื). ืืืืจ ืืื, ืืื ืืืืืื ืืืืื ืืืืืง ืืืกืคืจ ืืืืจืื ืฉืืืกืจื ืืื ืืงืื ืืช ืืืื ืืืืืฆืข ืืื ืฆ'ืง.
ืืฉ ืืืคืขืื ืืช ืืชืจืืืฉืื ืขืืืจ ืื ืืืช ื-5 ืืคืฉืจืืืืช ืืืื ืื ืชืื ืื ืืขืืืจ ืืืืื ืฉืื ืื ืฉื ืืจืฉืช ืืืืจืชืืช ืืื ืืจืืืช ืืืฆื ืืืื ืืฉืชื ื ืืื ืฉืืื ืืื. ืืชืื n ืืืช, ืืืืืืจืื ืืจืฉืช ืืจืฉืืืช ืืืฉืชืืฉืื ืืืืืงื ืืืืืื, ืืืืื, ืืืืืช ืืืื ืขืืืจ ืื 5 ืืืคืฉืจืืืืช.
ืืืื ื ืืืื ืืืชืจ, ืืืื ืืืืื ืื ืชืื ืื ืฉื ืืฆืจื ืขืืืจ n=5. ื"ืืืืื" ืืืชืื ืืืืฆืจ ืฉืืืฉื ืืืืื ื ืืืื ืืคืื:
- ืืจืืฉืื ืืืืขื ืืืื ืกื
- ืืฉื ื ืืื ืืืืืงื
- ืฉืืืฉืืช - ืืืืืงื
{0: [1], 1: [4, 5, 3, 2, 1], 2: [1, 2], 3: [2, 4, 1, 5, 3], 4: [2, 1]} # ะฒัะตะณะพ 15 ะดััะทะตะน
{0: [1, 10800], 1: [5, 10800, 2, 10801, 4, 10802], 2: [1, 10800], 3: [3, 10800, 1, 10801, 5, 10802], 4: [2, 10800]} # ะฒัะตะณะพ 18 ะฟัะพะฒะตััะตะผัั
ััะฑัะตะบัะพะฒ
{0: [1], 1: [1, 3, 2, 5, 4], 2: [1, 2], 3: [4, 1, 2, 3, 5], 4: [1, 2]} # ะฒัะตะณะพ 15 ะดััะทะตะน
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืื ืืืืืื ืืืืืืื ื-10 ืืืืืื ืืืืืงื ืื ืืืืืง ืืื ืฉืืืืืื ืืชื ื ืืช ืืชืฉืืื False. ืืืกืคื, ืืืืงื ืืืืืงื ืฉื "ืืืจืื" ืืชืืฆืขืืช ืืืืืง ืืจืฆืฃ ืืืฆืืื ืืืืืื.
ืื ืืกืื ืืืฆืข ืขื ืืืฉื ื ืืื ืฉืื ืคืืขื Windows 10, ืืืฉืจ HBase ืคืขื ืืืืื ืืื ืฉื Docker, ื-Python ืขื Jupyter Notebook ืคืขื ืืฉื ื. ื-Docker ืืืงืฆื 2 ืืืืืช CPU ื-2 GB ืฉื ืืืืจืื RAM. ืื ืืืืืืื, ืืื ืืืืืืฆืื ืฉื "ืืืคืืืงืฆืื ืืืืชื ืืช" ืื"ืฆื ืจืช" ืืืคืงืช ื ืชืื ื ืืืืงื ืืืืืื ืฉื ืืื, ื ืืชืื ืืคืืืชืื. ืืกืคืจืืื ืฉืืืฉื ืืขืืืื ืขื HBase
ืืืชืืฉื ืืืื ืืืืฉืื ืฉื ืืืฉื ื ืืื ืืกืืื, ืืฉืงื ืขืืืจ n = 10, 30, โฆ ื ืืืจื ืื ืืกืื. 170 - ืืืฉืจ ืืื ืืคืขืืื ืืืืื ืฉื ืืืืืจ ืืืืืงื ืืืื (ืื ืืชืจืืืฉืื ืขืืืจ ืื ืืืคืฉืจืืืืช ืขืืืจ ืื n) ืืื ืืคืืื ืคืืืช ืื ืืืชืจ ืกืืืจ ืืืืื ืืืืื ืืกืืืช ืชื ืืืช (ืืืืืฆืข 15 ืืงืืช).
ืืื ืืฉ ืฆืืจื ืืืขืืจ ืฉืื ืืกืื ืื ืื ืื ื ืื ืืขืจืืืื ืืขืืงืจ ื ืชืื ื ืืืฆืืขืื ืืืืืืื. ืืคืืื ืืฉืืืื ืืืกืืช ืฉื ืฉืชื ืืคืฉืจืืืืช ืฉืื ืืช ืขืฉืืื ืืืืืช ืื ืืืืจื ื ืืื ื. ืืขืช ืื ื ืืชืขื ืืื ืื ืืืืคื ืืฉืื ืื ืืืื ืืืชืื ื-n, ืฉืื ืืืชืืฉื ืืชืฆืืจื ืฉืืขืื ืฉื "ืืืื ืืืืื", ืงืฉื ืืืื ืืืฉืื ืืืืื ื ืืื "ืื ืืงืื" ืืืฉืคืขืชื ืฉื ืืืจืืื ืืงืจืืืื ืืืืจืื ( ืืืฉืืื ืืื ืื ื ืงืืขื).
ืชืืฆืืช ืื ืืกืื
ืืืืื ืืจืืฉืื ืืื ืืืฆื ืืฉืชื ื ืืืื ืืืืฉืงืข ืืืืืื ืจืฉืืืช ืืืืจืื. ืืชืืฆืื ื ืืฆืืช ืืืจืฃ ืืืื.
ืืคืฉืจืืืืช 3-5, ืืฆืคืื, ืืฆืืืืช ืืื ืืืขื ืงืืืข ืฉื "ืขืกืงื ืขืกืงืืช", ืฉืืื ื ืชืืืื ืืฆืืืืช ืืืื ืืจืฉืช ืืืืืื ืืืชื ืืืืื ืืืืฆืืขืื.
ืืคืฉืจืืช 2 ืืฆืืื ืื ืืืฆืืขืื ืงืืืขืื, ืื ืืขื ืืจืืขืื ืืืชืจ, ืืืขื ืืืืืง ืคื 2 ืืืืก ืืืคืฉืจืืืืช 3-5. ืืื ืื ืืืื ืืื ืืฉืืื, ืืืืืื ืฉืื ืืชืื ืขื ืืชืืืืจืื - ืืืจืกื ืื ืืกืคืจ ืคืขืืืืช ื-I/O ื/ืื HBase ืืืื ืืืืืง ืคื 2. ืื ืืืื ืืฉืืฉ ืจืืื ืขืงืืคื ืืื ืฉืกืคืกื ืืืืืงื ืฉืื ื, ืืืืคื ืขืงืจืื ื, ืืกืคืง ืืืืง ืืื.
ืื ืืคืฉืจืืช 1, ืืฆืคืื, ืืชืืจืจืช ืืืืืืช ืืืืชืจ ืืืืืืื ืขืืืื ืืื ืืืจืืช ืืืื ืืืืฉืงืข ืืืืกืคืช ืื ืืืืื ืืจืฉืช.
ืืขืช ื ืกืชืื ืขื ืชืืฆืืืช ืืืืืงื ืืฉื ืืื.
ืืคืฉืจืืืืช 3-5 ืฉืื ืืชื ืืืืช ืืืฆืืคื - ืืื ืงืืืข, ืืื ืชืืืช ืืืืื ืืจืฉืช. ืืคืฉืจืืืืช 1 ื-2 ืืืืืืืช ืขืืืื ืืื ืืืจืืช ืืืื ืืื ืฉืืืื ืืจืฉืช ืืื ืืืืฆืืขืื ืืืืื. ืืชืจื ืืื, ืืคืฉืจืืช 2 ืืชืืจืจืช ืืืขื ืืืืืช ืืืชืจ - ืืื ืื ืจืื ืืฉื ืืฆืืจื ืืืืื ืืขืืืื ืฉื ืขืืืืช ื"ืกืคืืจื" ืื ืืกืคืช, ืืฉืจ ืืืคืืช ืืืืืช ืืืชืจ ืืื ืฉ-n ืืื. ืืื ืขืืืื ืืื ืข ืืืกืงืช ืืกืงื ืืช ืืืฉืื, ืฉืื ืืืืืง ืฉื ืืฉืืืื ืื ื ืืื ืืืกืืช. ืื ืืกืฃ, ืืืืกืื ืืืื (ืืืื ืืคืฉืจืืช, 1 ืื 2, ืืืืจื ืืืชืจ) ืืฉืชื ื ืืจืืฆื ืืจืืฆื (ืชืื ืฉืืืจื ืขื ืืืคื ืืชืืืช ื"ืืืืืช ืฆืืืืจ ืืฆืืืืจ").
ืืืื, ืืืจืฃ ืืืืจืื ืืื ืชืืฆืื ืฉื ืืืืงืช ืืกืจื.
ืฉืื, ืืื ืืื ืืคืชืขืืช. ืืคืฉืจืืืืช 3-5 ืืืฆืขืืช ืืกืจื ืืืื ืงืืืข.
ืืชืจื ืืื, ืืืืคื ืืขื ืืื, ืืคืฉืจืืืืช 4 ื-5, ืื ืืืื ืืชืจืืืฉืื ืืงืืืืื, ืืฆืืืืช ืืืฆืืขืื ืืขื ืืจืืขืื ืืืชืจ ืืืืคื ื ืืืจ ืืืืคืฆืื 3. ืืื ืื ืจืื, ืคืขืืืช ืืืืงืช ืืฉืืจืืช ืืงืจื ืืืชืจ ืืคืขืืืช ืืืืงืช ืืขืืืืืช, ืฉืืื ืืืจื ืืื ืืืืื ืืช.
ืืคืฉืจืืืืช 1 ื-2, ืืฆืคืื, ืืืืืืืช ืขืืืื ืืื ืืืจืืช ืืืื. ืืื ืขื ืืืช, ืืคืฉืจืืช 2 ืืืืืช ืืืชืจ ืืืืคื ืขืงืื ืืืืคืฆืื 1 - ืขืงื ืคืขืืืช ื-I/O ืื ืืกืคืช ื"ืฉืืืจื" ืขื ืขืืืืช ืืกืคืืจื.
ืืกืงื ืืช ืืืืืืช ืฉื ืื ืืกืื:
- ืืคืฉืจืืืืช 3-5 ืืืืืืืช ืืขืืืืช ืจืื ืืืชืจ ืืฉืื ืื ืฆืืืช ืืช ืืืชืจืื ืืช ืฉื HBase; ืืชืจ ืขื ืื, ืืืืฆืืขืื ืฉืืื ืฉืื ืื ืื ืืื ืืงืืืข ืืืื ื ืชืืืืื ืืืืื ืืจืฉืช.
- ืืืืื ืืื ืืคืฉืจืืืืช 4 ื-5 ืื ื ืจืฉื. ืืื ืื ืื ืืืืจ ืฉืืกืืจ ืืืฉืชืืฉ ืืืคืฉืจืืช 5. ืกืืืจ ืืื ืื ืฉืืชืจืืืฉ ืื ืืกืื ืื ื ืขืฉื ืฉืืืืฉ, ืชืื ืืชืืฉืืืช ืืืืคืืื ื ืืืืฆืืขืื ืฉื ืกืคืกื ืืืืืงื, ืื ืืคืฉืจ ืืช ืืืืืื.
- ืืืคื ืืืืืื ืืืื ืืืจืืฉ ืืืืฆืืข "ืคืขืืืืช ืขืกืงืืืช" ืขื ื ืชืื ืื ืืืฉืจ ืืืจื ืืื ืืช ืืืืฉืืืื ืืชืืืืจืืืื ืฉืืืฉืื ืงืืื ืืื ืขืืืจ ืื ืืืคืฉืจืืืืช.
ืืคืืืื
ืืื ืืจืืืช ืื ืืกืืืื ืืืกืื ืฉืืืฆืขื ืืืืช ืืืืืืช. ืืฉื ื ืืืจืืื ืจืืื ืฉืื ื ืืงืื ืืืฉืืื ืืขืืืืชื ืืช ืืชืืฆืืืช (ืชื ืืืืช ืืื ื ืืืจืืช ืืืืืื ืืืจืคืื ืขื ืืืื ืจืฉืช ืงืื). ืืืฉื, ืืืืจืืช ืืืกืืื, ืืืฉืืฉืช ืืช happybase, ื ืคื ืืฉืืืช ืืืฉืื ืืืืืืื ืฉืืชืืชื ื-Python (ืืื ื ืืืื ืืืขืื ืฉืืงืื ื ืืชื ืืฆืืจื ืืืคืืืืืืช ืืืืขืืืืช ืืฉืชืืฉ ืืืืืืืช ืฉื ืื ืืจืืืืื), ืืืื ืืชืืื ืืช ืฉื ืืืืื HBase, ืคืขืืืืช ืืจืงืข ืฉื Windows 10 ืืืืฉื ืื ืืื ืฉืื ืืื'. ืืืืคื ืืืื, ืื ื ืืืืืื ืืื ืื ืฉืื ืืืืฉืืืื ืืชืืืืจืืืื ืืืืืื ืื ืืกืื ืืช ืชืงืคืืชื. ืืืื, ืื ืืคืืืช ืื ื ืืชื ืืื ืืืคืจืื ืืืชื ื"ืืชืงืคื ืืืืชืืช" ืืื.
ืืกืืืื, ืืืืฆืืช ืืื ืื ืฉืจืง ืืชืืื ืืขืฆื ืืืืืื ืฉื ื ืชืื ืื ื-HBase: ืืืคืฉื ืื ืืกืืื ืงืืื ืืขืืืื ืขื ืืกืื ื ืชืื ืื ืืืกืืื ืืืืจื ืืช ื"ืคืงืืืืช":
- ืืขืช ืืชืื ืื, ืื ื ืืืฆืืื ืืืืฉืืื ืืืืืคืืกืื ืฉื ืื ืืคืืืฆืื ืฉื ื ืชืื ืื, ืืื ืืืืื ืืชืืื
- ืืืฉื ืืขืืื (ืืื ืกืจืืงืช ืืืื ืืืื) - ืจืง ืืืืฆืขืืช ืืคืชื
- ืื ืืจืืืืืฆืื
- ืฉืืจืืช ืฉืื ืืช ืืืืืืช ืืืืื ืขืืืืืช ืฉืื ืืช
- ืืจืื ืืื ืื ืฉื ืจืืงืืืื
ืืงืืจ: www.habr.com