เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank

เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ•เบฐเบซเบฅเบปเบ, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบฎเบนเบšเบžเบฒเบšเบชเบฐเป€เบžเบฒเบฐเบ™เบตเป‰เบชเบฐเบ—เป‰เบญเบ™เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบชเบธเบ”เบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เบงเปˆเบฒ:

เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank

เบญเบตเบ‡เบ•เบฒเบก DB-Engines Ranking, เบชเบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ NoSQL columnar เบ—เบตเปˆเบ™เบดเบเบปเบกเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™ Cassandra (เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™ CS) เปเบฅเบฐ HBase (HB).

เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank

เป‚เบ”เบเบ„เบงเบฒเบกเบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เป‚เบŠเบเบŠเบฐเบ•เบฒ, เบ—เบตเบกเบ‡เบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบเบฒเบ™เป‚เบซเบผเบ”เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆ Sberbank เป„เบ”เป‰เปเบฅเป‰เบง เบเบฒเบงเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”เบเบฑเบš HB. เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบถเบเบชเบฒเบˆเบธเบ”เปเบ‚เบ‡เปเบฅเบฐเบˆเบธเบ”เบญเปˆเบญเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป„เบ”เป‰เบ”เบตเปเบฅเบฐเบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡เบกเบฑเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเบฒเบ™เบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡ CS เบชเบฐเป€เบซเบกเบตเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ—เปเบฅเบฐเบกเบฒเบ™เบ•เบปเบงเป€เบฎเบปเบฒเป€เบญเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบเบ”เป‰เบงเบเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบช: เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบšเป? เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš, เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบ DataStax, เบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ CS เป€เบญเบปเบฒเบŠเบฐเบ™เบฐ HB เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบ”เป‰เบงเบเบ„เบฐเปเบ™เบ™ crushing. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, DataStax เปเบกเปˆเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบชเบปเบ™เปƒเบˆ, เปเบฅเบฐเบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เปƒเบŠเป‰เบ„เปเบฒเป€เบงเบปเป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฑเบšเบชเบปเบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ„เบปเป‰เบ™เบซเบฒเบ•เบปเบงเป€เบญเบ‡เบงเปˆเบฒเปƒเบœเป€เบ›เบฑเบ™เบเบฐเบชเบฑเบ”เบ‚เบญเบ‡ BigData NoSql, เปเบฅเบฐเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบ.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก. เบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเปเบกเปˆเบ™เบงเปˆเบฒ CS เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบกเบนเบ™. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ (node) เบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เปเบฅเบฐเบ–เป‰เบฒเบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบกเบฑเบ™เบฅเบปเป‰เบกเป€เบซเบฅเบง, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบˆเบฐเบชเบนเบ™เป€เบชเบเป„เบ›. เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบ, เบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™, เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบ‚เบฐเปเบซเบ™เบ‡เบเบฒเบ™เบ—เบฐเบ™เบฒเบ„เบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบชเปเบฒเป€เบ™เบปเบฒเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ CS เปƒเบ™เป‚เบซเบกเบ” replication triple เป„เบ”เป‰เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ, i.e. เบเบฒเบ™เบชเป‰เบฒเบ‡ casespace เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบงเบเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

CREATE KEYSPACE ks WITH REPLICATION = {'class' : 'NetworkTopologyStrategy', 'datacenter1' : 3};

เบ•เปเปˆเป„เบ›, เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเป€เบžเบทเปˆเบญเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบฅเบฐเบ”เบฑเบšเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™. เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบ—เบปเปˆเบงโ€‹เป„เบ›โ€‹:
NW + NR > RF

เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบˆเบฒเบ nodes เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เบฝเบ™ (NW) เบšเบงเบเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบˆเบฒเบ nodes เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบญเปˆเบฒเบ™ (NR) เบˆเบฐเบ•เป‰เบญเบ‡เบซเบผเบฒเบเบเปˆเบงเบฒเบ›เบฑเบ”เป„เบˆเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, RF = 3, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบกเบฒเบฐเบชเบปเบก:
2 + 2 > 3
3 + 1 > 3

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒเบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เป‚เบ„เบ‡เบเบฒเบ™ 3+1 เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบ. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, HB เป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบซเบผเบฑเบเบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™, i.e. เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบˆเบฐเบกเบตเบ„เบงเบฒเบกเบเบธเบ•เบดเบ—เปเบฒเบเบงเปˆเบฒ.

เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ DataStax เป„เบ”เป‰เป€เบฎเบฑเบ”เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเปƒเบ™เบเบฒเบ™เบชเบถเบเบชเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบžเบงเบเป€เบ‚เบปเบฒเบเปเบฒเบ™เบปเบ” RF = 1 เบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡ CS เปเบฅเบฐ HB (เบชเปเบฒเบฅเบฑเบšเบ•เปเปˆเบกเบฒเป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ HDFS). เบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” CS เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เปเบกเปˆเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบฎเบนเบšเบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเป‚เบซเบฅเบ”เบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเปƒเบ™ CS:

เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰: เบซเบปเบงเบ‚เปเป‰เบ—เบตเปˆเบกเบตเบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบซเบผเบฒเบเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™, เบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เปเบ•เปˆเบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเปเบฒเบฅเบฑเบš RF = 3 เปเบกเปˆเบ™เบชเบนเบ‡เบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™ 4 เบเบฐเบ—เบนเป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ 5 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ (20 เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”), RF = 3 เบˆเบฐเบชเบนเบ™เป€เบชเบเบ›เบฐเบกเบฒเบ™ 2 เป€เบ—เบทเปˆเบญ (150 เบงเบดเบ™เบฒเบ—เบตเบชเปเบฒเบฅเบฑเบš RF = 3 เบ—เบฝเบšเบเบฑเบš 75 เบชเปเบฒเบฅเบฑเบš RF = 1). เปเบ•เปˆเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบเบฒเบ™เป‚เบซเบผเบ”เป‚เบ”เบเบเบฒเบ™เป‚เบซเบผเบ”เบ‚เปเป‰เบกเบนเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ 8 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบต 5 threads เปเบ•เปˆเบฅเบฐเบ„เบปเบ™ (40 เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เบชเบนเบ™เป€เบชเบ RF = 3 เปเบกเปˆเบ™เปเบฅเป‰เบง 2,7 เป€เบ—เบปเปˆเบฒ (375 เบงเบดเบ™เบฒเบ—เบตเบ—เบฝเบšเบเบฑเบš 138).

เบšเบฒเบ‡เบ—เบตเบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบชเปˆเบงเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบฅเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เป‚เบซเบผเบ”เบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบ—เบตเปˆเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ”เบ DataStax เบชเปเบฒเบฅเบฑเบš CS, เป€เบžเบฒเบฐเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบš HB เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบขเบทเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ›เบฑเบ”เป„เบˆเบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบˆเบฒเบ 2 เบซเบฒ 3 เบšเปเปˆเบกเบตเบœเบปเบ™เปƒเบ”เป†. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เปเบœเปˆเบ™เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบ‚เบงเบ” HB เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบตเบซเบผเบฒเบ pitfalls เบ—เบตเปˆเบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ‚เบญเบ‡ HB เป„เบ”เป‰เบ–เบทเบ patched เป€เบฅเบฑเบเบ™เป‰เบญเบเปเบฅเบฐ tweaked, เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบšเบฒเบ‡เบ—เบตเบ‚เป‰เบญเบเบžเบฝเบ‡เปเบ•เปˆเบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบเบฐเบเบฝเบก CS เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบกเบตเบšเบฒเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™, เปเบฅเบฐเบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบŠเบญเบเบซเบฒเปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™. เปเบ•เปˆเบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เปเบฒเบญเบดเบ”.

เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เป„เบ”เป‰โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบขเบนเปˆโ€‹เปƒเบ™โ€‹เบเบธเปˆเบกโ€‹เบฎเบฒเบ”โ€‹เปเบงโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เป‰เบงเบ 4 เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹, เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ„เบปเบ™โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

CPU: Xeon E5-2680 v4 @ 2.40GHz 64 เบเบฐเบ—เบนเป‰.
เปเบœเปˆเบ™: 12 เบŠเบดเป‰เบ™ SATA HDD
java เป€เบงเบตเบŠเบฑเปˆเบ™: 1.8.0_111

CS เป€เบงเบตเบŠเบฑเปˆเบ™: 3.11.5

cassandra.yml เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตnum_tokens: 256
hinted_handoff_enabled: เบˆเบดเบ‡
hinted_handoff_throttle_in_kb: 1024
max_hints_delivery_threads: 2
hints_directory: /data10/cassandra/hints
hints_flush_period_in_ms: 10000
max_hints_file_size_in_mb: 128
batchlog_replay_throttle_in_kb: 1024
authenticator: AllowAllAuthenticator
authorizer: AllowAllAuthorizer
role_manager: CassandraRoleManager
roles_validity_in_ms: 2000
permissions_validity_in_ms: 2000
credentials_validity_in_ms: 2000
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
data_file_directories:
- /data1/cassandra/data # เปเบ•เปˆเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต dataN เปเบกเปˆเบ™เปเบœเปˆเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ
- /data2/cassandra/data
- /data3/cassandra/data
- /data4/cassandra/data
- /data5/cassandra/data
- /data6/cassandra/data
- /data7/cassandra/data
- /data8/cassandra/data
commitlog_directory: /data9/cassandra/commitlog
cdc_enabled: false
disk_failure_policy: เบขเบธเบ”
commit_failure_policy: เบขเบธเบ”
Prepare_statements_cache_size_mb:
thrift_prepared_statements_cache_size_mb:
key_cache_size_in_mb:
key_cache_save_period: 14400
row_cache_size_in_mb: 0
row_cache_save_period: 0
counter_cache_size_in_mb:
counter_cache_save_period: 7200
saved_caches_directory: /data10/cassandra/saved_caches
commitlog_sync: เป€เบ›เบฑเบ™เป„เบฅเบเบฐ
commitlog_sync_period_in_ms: 10000
commitlog_segment_size_in_mb: 32
เบœเบนเป‰เปƒเบซเป‰เปเบเปˆเบ™:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต:
- เปเบเปˆเบ™: "*,*"
concurrent_reads: 256 # เบžเบฐเบเบฒเบเบฒเบก 64 - เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™
concurrent_writes: 256 # เบžเบฐเบเบฒเบเบฒเบก 64 - เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™
concurrent_counter_writes: 256 # เบžเบฐเบเบฒเบเบฒเบก 64 - เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™
concurrent_materialized_view_writes: 32
memtable_heap_space_in_mb: 2048 # เบžเบฐเบเบฒเบเบฒเบก 16 GB - เบกเบฑเบ™เบŠเป‰เบฒเบเบงเปˆเบฒ
memtable_allocation_type: heap_buffers
index_summary_capacity_in_mb:
index_summary_resize_interval_in_minutes: 60
trickle_fsync: เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡
trickle_fsync_interval_in_kb: 10240
storage_port: 7000
ssl_storage_port: 7001
เบ—เบตเปˆเบขเบนเปˆเบŸเบฑเบ‡: *
เบ—เบตเปˆเบขเบนเปˆเบญเบญเบเบญเบฒเบเบฒเบ”: *
listen_on_broadcast_address: เบˆเบดเบ‡
internode_authenticator: org.apache.cassandra.auth.AllowAllInternodeAuthenticator
start_native_transport: เบ–เบทเบ
native_transport_port: 9042
start_rpc: เปเบ—เป‰
rpc_dress: *
rpc_port: 9160
rpc_keepalive: เบˆเบดเบ‡
rpc_server_type: sync
thrift_framed_transport_size_in_mb: 15
incremental_backups: false
snapshot_before_compaction: false
auto_snapshot: เบˆเบดเบ‡
column_index_size_in_kb: 64
column_index_cache_size_in_kb: 2
concurrent_compactors: 4
compaction_throughput_mb_per_sec: 1600
sstable_preemptive_open_interval_in_mb: 50
read_request_timeout_in_ms: 100000
range_request_timeout_in_ms: 200000
write_request_timeout_in_ms: 40000
counter_write_request_timeout_in_ms: 100000
cas_contention_timeout_in_ms: 20000
truncate_request_timeout_in_ms: 60000
request_timeout_in_ms: 200000
slow_query_log_timeout_in_ms: 500
cross_node_timeout: เบœเบดเบ”
endpoint_snitch: GossipingPropertyFileSnitch
dynamic_snitch_update_interval_in_ms: 100
dynamic_snitch_reset_interval_in_ms: 600000
dynamic_snitch_badness_threshold: 0.1
request_scheduler: org.apache.cassandra.scheduler.NoScheduler
server_encryption_options:
internode_encryption: เบšเปเปˆเบกเบต
client_encryption_options:
เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™: false
internode_compression: dc
inter_dc_tcp_nodelay: false
tracetype_query_ttl: 86400
tracetype_repair_ttl: 604800
enable_user_defined_functions: false
enable_scripted_user_defined_functions: false
windows_timer_interval: 1
transparent_data_encryption_options:
เป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™: false
tombstone_warn_threshold: 1000
tombstone_failure_threshold: 100000
batch_size_warn_threshold_in_kb: 200
batch_size_fail_threshold_in_kb: 250
unlogged_batch_across_partitions_warn_threshold: 10
compaction_large_partition_warning_threshold_mb: 100
gc_warn_threshold_in_ms: 1000
back_pressure_enabled: false
enable_materialized_views: เปเบกเปˆเบ™เปเบ—เป‰
enable_sasi_indexes: เบˆเบดเบ‡

เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ GC:

### เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ CMS-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSParallelRemarkEnabled
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=1
-XX:CMSIinitiatingOccupancyFraction=75
-XX:+UseCMSSIinitiatingOccupancyOnly
-XX:CMSWaitDuration=10000
-XX:+CMSParallelInitialMarkEnabled
-XX:+CMSEdenChunksRecordเบชเบฐเป€เปเบต
-XX:+CMSClassUnloadingEnabled

เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ jvm.options เป„เบ”เป‰เบ–เบทเบเบˆเบฑเบ”เบชเบฑเบ™ 16Gb (เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบžเบฐเบเบฒเบเบฒเบก 32 Gb, เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปƒเบ”เป†เบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™).

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡:

CREATE TABLE ks.t1 (id bigint PRIMARY KEY, title text) WITH compression = {'sstable_compression': 'LZ4Compressor', 'chunk_length_kb': 64};

เบฎเบธเปˆเบ™ HB: 1.2.0-cdh5.14.2 (เปƒเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™ org.apache.hadoop.hbase.regionserver.HRegion เบžเบงเบเป€เบฎเบปเบฒเบเบปเบเป€เบงเบฑเป‰เบ™ MetricsRegion เบ—เบตเปˆเบ™เปเบฒเป„เบ›เบชเบนเปˆ GC เป€เบกเบทเปˆเบญเบˆเปเบฒเบ™เบงเบ™เบžเบฒเบเบžเบทเป‰เบ™เบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒ 1000 เปƒเบ™ RegionServer)

เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบต HBase เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™zookeeper.session.timeout: 120000
hbase.rpc.timeout: 2 เบ™เบฒเบ—เบต
hbase.client.scanner.timeout.period: 2 เบ™เบฒเบ—เบต
hbase.master.handler.count: 10
hbase.regionserver.lease.period, hbase.client.scanner.timeout.period: 2 เบ™เบฒเบ—เบต
hbase.regionserver.handler.count: 160
hbase.regionserver.metahandler.count: 30
hbase.regionserver.logroll.period: 4 เบŠเบปเปˆเบงเป‚เบกเบ‡
hbase.regionserver.maxlogs: 200
hbase.hregion.memstore.flush.size: 1 GiB
hbase.hregion.memstore.block.multiplier: 6
hbase.hstore.compactionThreshold: 5
hbase.hstore.blockingStoreFiles: 200
hbase.hregion.majorcompaction: 1 เบกเบทเป‰
HBase Service Advanced Configuration Snippet (Safety Valve) เบชเปเบฒเบฅเบฑเบš hbase-site.xml:
hbase.regionserver.wal.codecorg.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec
hbase.master.namespace.init.timeout3600000
hbase.regionserver.optionalcacheflushinterval18000000
hbase.regionserver.thread.compaction.large12
hbase.regionserver.wal.enablecompressiontrue
hbase.hstore.compaction.max.size1073741824
hbase.server.compactchecker.interval.multiplier200
เบ•เบปเบงเป€เบฅเบทเบญเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Java เบชเปเบฒเบฅเบฑเบš HBase RegionServer:
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSIinitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:ReservedCodeCacheSize=256m
hbase.snapshot.master.timeoutMillis: 2 เบ™เบฒเบ—เบต
hbase.snapshot.region.timeout: 2 เบ™เบฒเบ—เบต
hbase.snapshot.master.timeout.millis: 2 เบ™เบฒเบ—เบต
เบ‚เบฐเปœเบฒเบ”เบšเบฑเบ™เบ—เบถเบเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบต HBase REST: 100 MiB
เป€เบŠเบตเบšเป€เบงเบต HBase REST เบšเบฑเบ™เบ—เบถเบเบ‚เปเป‰เบกเบนเบ™เบšเบฑเบ™เบ—เบถเบเบชเบนเบ‡เบชเบธเบ”: 5
HBase Thrift Server Max เบ‚เบฐเปœเบฒเบ”เบšเบฑเบ™เบ—เบถเบ: 100 MiB
HBase Thrift Server Maximum Log File Backups: 5
เบ‚เบฐเปœเบฒเบ”เบšเบฑเบ™เบ—เบถเบ Master Max: 100 MiB
Master เบšเบฑเบ™เบ—เบถเบเป„เบŸเบฅเปŒเบชเปเบฒเบฎเบญเบ‡เบชเบนเบ‡เบชเบธเบ”: 5
RegionServer Max Log Size: 100 MiB
RegionServer เบšเบฑเบ™เบ—เบถเบเป„เบŸเบฅเปŒเบชเบณเบฎเบญเบ‡เบชเบนเบ‡เบชเบธเบ”: 5
HBase Active Master Detection Window: 4 เบ™เบฒเบ—เบต
dfs.client.hedged.read.threadpool.size: 40
dfs.client.hedged.read.threshold.millis: 10 เบกเบดเบ™เบฅเบดเบงเบดเบ™เบฒเบ—เบต
hbase.rest.threads.min: 8
hbase.rest.threads.max: 150
เบ•เบปเบงเบญเบฐเบ—เบดเบšเบฒเบเป„เบŸเบฅเปŒเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบนเบ‡เบชเบธเบ”: 180000
hbase.thrift.minWorkerThreads: 200
hbase.master.executor.openregion.threads: 30
hbase.master.executor.closeregion.threads: 30
hbase.master.executor.serverops.threads: 60
hbase.regionserver.thread.compaction.small: 6
hbase.ipc.server.read.threadpool.size: 20
Region Mover Threads: 6
Client Java Heap Size เปƒเบ™ Bytes: 1 GiB
HBase REST Server Default Group: 3 GiB
HBase Thrift Server Default Group: 3 GiB
Java Heap เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ HBase Master เปƒเบ™ Bytes: 16 GiB
Java Heap เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ HBase RegionServer เปƒเบ™ Bytes: 32 GiB

+ ZooKeeper
maxClientCnxns: 601
maxSessionTimeout: 120000
เบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡:
hbase org.apache.hadoop.hbase.util.RegionSplitter ns:t1 UniformSplit -c 64 -f cf
เบ›เปˆเบฝเบ™เปเบ›เบ‡ 'ns:t1', {NAME => 'cf', DATA_BLOCK_ENCODING => 'FAST_DIFF', COMPRESSION => 'GZ'}

เบกเบตเบˆเบธเบ”เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ - เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ DataStax เบšเปเปˆเป„เบ”เป‰เบšเบญเบเบงเปˆเบฒเบกเบตเบˆเปเบฒเบ™เบงเบ™เบžเบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ HB, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ›เบฐเบฅเบดเบกเบฒเบ™ = 64 เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบ, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบ”เป‰เป€เบ–เบดเบ‡ 640 GB, i.e. เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบเบฒเบ‡โ€‹.

เปƒเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, HBase เบกเบต 22 เบžเบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบฅเบฐ 67 เบžเบฑเบ™เบžเบฒเบเบžเบทเป‰เบ™ (เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ•เบฒเบเบชเปเบฒเบฅเบฑเบšเบชเบฐเบšเบฑเบš 1.2.0 เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบš patch เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡).

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ”เบกเบตเบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐ, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ•เปˆเบฒเบ‡เป†. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เบšเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, 4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป„เบ”เป‰เบ–เบทเบเป‚เบซเบฅเบ”เบžเป‰เบญเบกเป†เบเบฑเบ™ (เบ—เบฑเบ‡เบซเบกเบปเบ” 4 nodes เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ). เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบญเบทเปˆเบ™เป†เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš 8 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบต, เบ‚เบฐเบซเบ™เบฒเบ” batch เปเบกเปˆเบ™ 100, เปƒเบ™เบ„เบปเบ™เบญเบทเปˆเบ™ 200 (เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต batch - เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰). เบ‚เบฐเปœเบฒเบ”เบ‚เปเป‰เบกเบนเบ™เบชเบณเบฅเบฑเบšเบ„เปˆเบฒเปเบกเปˆเบ™ 10 bytes เบซเบผเบท 100 bytes (dataSize). เปƒเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, 5 เบฅเป‰เบฒเบ™เบšเบฑเบ™เบ—เบถเบเป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เปเบฅเบฐเบญเปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, 5 เบเบฐเบ—เบนเป‰เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™ / เบญเปˆเบฒเบ™เปƒเบชเปˆเปเบ•เปˆเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ (thread number - thNum), เปเบ•เปˆเบฅเบฐเบซเบปเบงเบ‚เปเป‰เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ (เบ™เบฑเบš = 1 เบฅเป‰เบฒเบ™):

if (opType.equals("insert")) {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        StringBuilder sb = new StringBuilder("BEGIN BATCH ");
        for (int i = 0; i < batch; i++) {
            String value = RandomStringUtils.random(dataSize, true, true);
            sb.append("INSERT INTO ")
                    .append(tableName)
                    .append("(id, title) ")
                    .append("VALUES (")
                    .append(key)
                    .append(", '")
                    .append(value)
                    .append("');");
            key++;
        }
        sb.append("APPLY BATCH;");
        final String query = sb.toString();
        session.execute(query);
    }
} else {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        StringBuilder sb = new StringBuilder("SELECT * FROM ").append(tableName).append(" WHERE id IN (");
        for (int i = 0; i < batch; i++) {
            sb = sb.append(key);
            if (i+1 < batch)
                sb.append(",");
            key++;
        }
        sb = sb.append(");");
        final String query = sb.toString();
        ResultSet rs = session.execute(query);
    }
}

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบซเบ™เป‰เบฒเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰ HB:

Configuration conf = getConf();
HTable table = new HTable(conf, keyspace + ":" + tableName);
table.setAutoFlush(false, false);
List<Get> lGet = new ArrayList<>();
List<Put> lPut = new ArrayList<>();
byte[] cf = Bytes.toBytes("cf");
byte[] qf = Bytes.toBytes("value");
if (opType.equals("insert")) {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        lPut.clear();
        for (int i = 0; i < batch; i++) {
            Put p = new Put(makeHbaseRowKey(key));
            String value = RandomStringUtils.random(dataSize, true, true);
            p.addColumn(cf, qf, value.getBytes());
            lPut.add(p);
            key++;
        }
        table.put(lPut);
        table.flushCommits();
    }
} else {
    for (Long key = count * thNum; key < count * (thNum + 1); key += 0) {
        lGet.clear();
        for (int i = 0; i < batch; i++) {
            Get g = new Get(makeHbaseRowKey(key));
            lGet.add(g);
            key++;
        }
        Result[] rs = table.get(lGet);
    }
}

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเปƒเบ™ HB เบฅเบนเบเบ„เป‰เบฒเบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เปเบเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เปเป‰เบกเบนเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบš, เบซเบ™เป‰เบฒเบ—เบตเปˆเบเบฒเบ™เป€เบเบทเบญเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ:

public static byte[] makeHbaseRowKey(long key) {
    byte[] nonSaltedRowKey = Bytes.toBytes(key);
    CRC32 crc32 = new CRC32();
    crc32.update(nonSaltedRowKey);
    long crc32Value = crc32.getValue();
    byte[] salt = Arrays.copyOfRange(Bytes.toBytes(crc32Value), 5, 7);
    return ArrayUtils.addAll(salt, nonSaltedRowKey);
}

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ” - เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš:

เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank

เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบŸ:

เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank

เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡ HB เปเบกเปˆเบ™เบซเบ™เป‰เบฒเบ›เบฐเบซเบฅเบฒเบ”เปƒเบˆเบซเบฅเบฒเบเบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบชเบงเปˆเบฒเบกเบตเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปƒเบ™เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ CS. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, Googling เปเบฅเบฐเบเบฒเบ™เบŠเบญเบเบซเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ—เบตเปˆเบชเบธเบ” (เป€เบŠเบฑเปˆเบ™ concurrent_writes เบซเบผเบท memtable_heap_space_in_mb) เบšเปเปˆเป„เบ”เป‰เป€เบฅเบฑเปˆเบ‡เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เป„เบกเป‰เบ—เปˆเบญเบ™เปเบกเปˆเบ™เบชเบฐเบญเบฒเบ”เปเบฅเบฐเบšเปเปˆเบชเบฒเบšเบฒเบ™เปƒเบ”เป†.

เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เปเบˆเบโ€‹เบขเบฒเบโ€‹เป€เบ—เบปเปˆเบฒโ€‹เบ—เบฝเบกโ€‹เบเบฑเบ™โ€‹เปƒเบ™โ€‹เบ—เบปเปˆเบงโ€‹เบ‚เปเป‰โ€‹, เบชเบฐโ€‹เบ–เบดโ€‹เบ•เบดโ€‹เบˆเบฒเบโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปเบกเปˆเบ™โ€‹เบ›เบฐโ€‹เบกเบฒเบ™โ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบฐเบ–เบดเบ•เบดเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฒเบเบซเบ™เบถเปˆเบ‡เปƒเบ™ nodesKeyspace: ks
เบˆเบณเบ™เบงเบ™เบญเปˆเบฒเบ™: 9383707
เบญเปˆเบฒเบ™ Latency: 0.04287025042448576 ms
เบ‚เบฝเบ™เบˆเปเบฒเบ™เบงเบ™: 15462012
เบ‚เบฝเบ™ Latency: 0.1350068438699957 ms
Flushes เบ—เบตเปˆเบเบฑเบ‡เบ„เป‰เบฒเบ‡: 0
เบ•เบฒเบ•เบฐเบฅเบฒเบ‡: t1
เบˆเบณเบ™เบงเบ™ SSTable: 16
เบžเบทเป‰เบ™เบ—เบตเปˆเบ™เบณเปƒเบŠเป‰ (เบชเบปเบ”): 148.59 MiB
เบžเบทเป‰เบ™เบ—เบตเปˆเปƒเบŠเป‰เบชเบญเบ (เบ—เบฑเบ‡เปเบปเบ”): 148.59 MiB
เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบเบžเบฒเบšเบ–เปˆเบฒเบ (เบ—เบฑเบ‡เปเบปเบ”): 0 bytes
เปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณเบ™เบญเบ heap เปƒเบŠเป‰ (เบ—เบฑเบ‡เปเบปเบ”): 5.17 MiB
เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบเบฒเบ™เบšเบตเบšเบญเบฑเบ” SSTable: 0.5720989576459437
เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เปเบšเปˆเบ‡เบชเปˆเบงเบ™ (เบ„เบฒเบ”เบ„เบฐเป€เบ™): 3970323
เบˆเบณเบ™เบงเบ™เบ•เบฒเบฅเบฒเบ‡ Memtable: 0
เบ‚เบฐเปœเบฒเบ”เบ‚เปเป‰เบกเบนเบ™ Memtable: 0 bytes
Memtable off heap memory เบ—เบตเปˆเปƒเบŠเป‰: 0 bytes
เบˆเบณเบ™เบงเบ™เบชเบฐเบงเบดเบ” Memtable: 5
เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™: 2346045
latency เบญเปˆเบฒเบ™เปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™: NaN ms
เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ‚เบฝเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™: 3865503
latency เบเบฒเบ™เบ‚เบฝเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™: NaN ms
เบเบฐเปเบชเป„เบŸเบ—เบตเปˆเบ„เป‰เบฒเบ‡เบขเบนเปˆ: 0
เป€เบ›เบตเป€เบŠเบฑเบ™เบเบฒเบ™เบชเป‰เบญเบกเปเบ›เบ‡: 0.0
Bloom เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบœเบปเบ™เบšเบงเบเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡: 25
Bloom filter เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡: 0.00000
Bloom filter space เปƒเบŠเป‰: 4.57 MiB
Bloom filter off heap memory เปƒเบŠเป‰: 4.57 MiB
เบ”เบฑเบ”เบŠเบฐเบ™เบตเบชเบฐเบซเบผเบธเบšเบ›เบดเบ”เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ heap เปƒเบŠเป‰: 590.02 KiB
เบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เป€เบกเบ•เบฒเป€เบ”เบ•เบฒเบญเบญเบเบˆเบฒเบเปœเปˆเบงเบเบ„เบงเบฒเบกเบˆเบณ heap เปƒเบŠเป‰เปเบฅเป‰เบง: 19.45 KiB
Compacted partition bytes เบ•เปเบฒเปˆเบชเบธเบ”เบ—เบตเปˆ: 36
Compacted partition bytes เบชเบนเบ‡เบชเบธเบ”: 42
Compacted partition mean bytes: 42
เป€เบŠเบฅเบ—เบตเปˆเบกเบตเบŠเบตเบงเบดเบ”เบชเบฐเป€เบฅเปˆเบเบ•เปเปˆเป€เบกเบฑเบ” (เบซเป‰เบฒเบ™เบฒเบ—เบตเบชเบธเบ”เบ—เป‰เบฒเบ): NaN
เบˆเบธเบฅเบฑเบ‡เบ—เบตเปˆเบกเบตเบŠเบตเบงเบดเบ”เบชเบนเบ‡เบชเบธเบ”เบ•เปเปˆเบŠเบญเบ (เบซเป‰เบฒเบ™เบฒเบ—เบตเบชเบธเบ”เบ—เป‰เบฒเบ): 0
เบ‚เบธเบกเบเบฑเบ‡เบชเบปเบšเบชเบฐเป€เบฅเปˆเบเบ•เปเปˆเบ•เปˆเบญเบ™ (เบซเป‰เบฒเบ™เบฒเบ—เบตเบชเบธเบ”เบ—เป‰เบฒเบ): NaN
เบ‚เบธเบกเบเบฑเบ‡เบชเบปเบšเบชเบนเบ‡เบชเบธเบ”เบ•เปเปˆเบŠเบดเป‰เบ™ (เบซเป‰เบฒเบ™เบฒเบ—เบตเบชเบธเบ”เบ—เป‰เบฒเบ): 0
เบเบฒเบ™เบเบฒเบเบžเบฑเบ™เบ—เบตเปˆเบซเบผเบธเบ”เบฅเบปเบ‡: 0 bytes

เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบ—เบตเปˆเบˆเบฐเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ batch (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเบฒเบ™เบชเบปเปˆเบ‡เบกเบฑเบ™เบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™) เบšเปเปˆเบกเบตเบœเบปเบ™, เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒเป€เบเบปเปˆเบฒ. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบนเบ‡เบชเบธเบ”เบชเปเบฒเบฅเบฑเบš CS, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเบฅเบฑเบš CS เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบชเปเบฒเบฅเบฑเบš DataStax - เบ›เบฐเบกเบฒเบ™เบซเบผเบฒเบเบฎเป‰เบญเบเบžเบฑเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒ CS เปƒเบŠเป‰ CPU เปเบฅเบฐเปเบœเปˆเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ:

เบฎเบปเบšเบ‚เบญเบ‡เบชเบญเบ‡ yakozuna, เบซเบผเบท Cassandra vs HBase. เบ›เบฐเบชเบปเบšเบเบฒเบ™เบ—เบตเบก Sberbank
เบ•เบปเบงเป€เบฅเบเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบชเบญเบ‡.

เบเปˆเบฝเบงเบเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฒเบ™เบญเปˆเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ HB. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบชเบญเบ‡, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบœเปˆเบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เปเบกเปˆเบ™เบ•เปเปˆเบฒเบ—เบตเปˆเบชเบธเบ” (เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบญเปˆเบฒเบ™เปเบกเปˆเบ™เบชเปˆเบงเบ™เบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบฎเบญเบšเบงเบฝเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบš CS เบ™เบตเป‰เปเบกเปˆเบ™เบˆเบฒเบ 15: 20 เบซเบฒ 15: 40). เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡ HB, เป€เบซเบ”เบœเบปเบ™เปเบกเปˆเบ™เบˆเบฐเปเบˆเป‰เบ‡ - เบ‚เปเป‰เบกเบนเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เบซเป‰เบญเบเบขเบนเปˆเปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เปƒเบ™ memstore, เปเบฅเบฐเบšเบฒเบ‡เบšเปˆเบญเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ blockcache. เบชเปเบฒเบฅเบฑเบš CS, เบกเบฑเบ™เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™เบซเบผเบฒเบเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”, เปเบ•เปˆเบเบฒเบ™เบฅเบตเป„เบŠเป€เบ„เบตเบ™เปเบœเปˆเบ™เปเบกเปˆเบ™เบเบฑเบ‡เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบต, เป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ”เปƒเบŠเป‰ cache row_cache_size_in_mb = 2048 เปเบฅเบฐเบ•เบฑเป‰เบ‡ cache = {'keys': 'ALL', 'rows_per_partition': ' 2000000'}, เปเบ•เปˆเบ™เบฑเป‰เบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบฎเป‰เบฒเบเปเบฎเบ‡เบ‚เบถเป‰เบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ.

เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบˆเบธเบ”เบชเปเบฒเบ„เบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบžเบฒเบเบžเบทเป‰เบ™เปƒเบ™ HB. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบกเบนเบ™เบ„เปˆเบฒเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™ 64. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบš, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, 4, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบญเปˆเบฒเบ™, เบ„เบงเบฒเบกเป„เบงเบซเบผเบธเบ”เบฅเบปเบ‡ 2 เป€เบ—เบทเปˆเบญ. เป€เบซเบ”เบœเบปเบ™เปเบกเปˆเบ™เบงเปˆเบฒ memstore เบˆเบฐเบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เป„เบงเบ‚เบถเป‰เบ™เปเบฅเบฐเป„เบŸเบฅเปŒเบˆเบฐเบ–เบทเบ flushed เป€เบฅเบทเป‰เบญเบเป†เปเบฅเบฐเป€เบกเบทเปˆเบญเบญเปˆเบฒเบ™, เป„เบŸเบฅเปŒเบซเบผเบฒเบเบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบ›เบธเบ‡เปเบ•เปˆเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบš HB. เปƒเบ™เบชเบฐเบžเบฒเบšเบ•เบปเบงเบˆเบดเบ‡, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ„เบดเบ”เป‚เบ”เบเบœเปˆเบฒเบ™เบเบธเบ”เบ—เบฐเบชเบฒเบ” presplitting เปเบฅเบฐเบซเบ™เบฒเปเบซเบ™เป‰เบ™; เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบžเบงเบเป€เบฎเบปเบฒเบ™เปเบฒเปƒเบŠเป‰เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบ‚เบฝเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เบ—เบตเปˆเป€เบเบฑเบšเบเปเบฒเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเปเบฅเบฐเบšเบตเบšเบญเบฑเบ” HFiles เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปƒเบ™เบžเบทเป‰เบ™เบซเบฅเบฑเบ‡. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบงเปˆเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบš DataStax เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฑเบ”เบชเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆ 1 เบžเบฒเบเบžเบทเป‰เบ™เบ•เปเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ (เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡) เปเบฅเบฐเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบŠเบตเป‰เปเบˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡ HB เบˆเบถเปˆเบ‡เบ•เปเปˆเบฒเบเบงเปˆเบฒเปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบšเบปเบ”เบชเบฐเบซเบผเบธเบšเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบ™เบตเป‰. เป‚เบ”เบเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เปƒเบ”เป†เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ Cassandra เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบฎเบนเบšเป„เบ‚เปˆเบ—เบตเปˆเบกเบตเบ•เบตเบ™เบ‚เบญเบ‡เบ”เบดเบ™เป€เบœเบปเบฒ. เบซเบผเบฒเบเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เบฒเบ‡เบ”เบธเปˆเบ™เบ”เปˆเบฝเบ‡เบ‚เบฒเบซเบ™เบถเปˆเบ‡, เบ”เบฑเปˆเบ‡เปƒเบ™เบฎเบนเบšเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก, เบ™เบฒเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ”เบต, เปเบ•เปˆเปƒเบ™เบเบฒเบ™เบ•เปเปˆเบชเบนเป‰เบžเบฒเบเปƒเบ•เป‰เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ”เบฝเบงเบเบฑเบ™, เบ™เบฒเบ‡เบชเบนเบ™เป€เบชเบเบ—เบฑเบ™เบ—เบต. เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™, เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ CPU เบ•เปˆเปเบฒเปƒเบ™เบฎเบฒเบ”เปเบงเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเบˆเบฐเบ›เบนเบเบชเบญเบ‡ RegionServer HBs เบ•เปเปˆเป€เบˆเบปเป‰เบฒเบžเบฒเบšเปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ. เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™. โ€‹เป‚เบ”เบโ€‹เบ–เบทโ€‹เป€เบญเบปเบฒโ€‹เบเบฒเบ™โ€‹เบ™เบณโ€‹เปƒเบŠเป‰โ€‹เบŠเบฑเบšโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบญเบ™, เบชเบฐเบžเบฒเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡ CS โ€‹เปเบกเปˆเบ™โ€‹เปœเป‰เบฒโ€‹เป€เบชเบโ€‹เปƒเบˆโ€‹เบเบงเปˆเบฒ.

เปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบชเบฑเบ‡เป€เบ„เบฒเบฐเปเบฅเบฐเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบงเปˆเบฒเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ terabytes, เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบ•เปˆเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบš HB เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป‚เบซเบฅเบ” terabytes, เบชเปเบฒเบฅเบฑเบš CS เบ™เบตเป‰เป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบšเบฑเบ™เบซเบฒ. เบกเบฑเบ™เบกเบฑเบเบˆเบฐเบ–เบดเป‰เบก OperationTimedOutException เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบ›เบฐเบฅเบดเบกเบฒเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบฅเปเบ–เป‰เบฒเบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เป„เบ”เป‰เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบซเบผเบฒเบเบ„เบฑเป‰เบ‡เป€เบกเบทเปˆเบญเบ—เบฝเบšเปƒเบชเปˆเบเบฑเบšเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™.

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเป‚เบ”เบเบœเปˆเบฒเบ™เบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบฎเปˆเบงเบกเบเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบŠเบญเบเบซเบฒเบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบ‚เบญเบ‡ CS เปเบฅเบฐเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบฑเปˆเบ‡เบกเบฑเบ™เป„เบ”เป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ•เบญเบš, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบžเบตเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบธเบ”เบ—เป‰เบฒเบเบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™.

UPD: เบ‚เปเบ‚เบญเบšเปƒเบˆเบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡ comrades, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบˆเบฑเบ”เบเบฒเบ™เป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™. เปเบกเปˆเบ™:
159 ops (644 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, 4 เบชเบฒเบ, batch 5).
เป€เบžเบตเปˆเบก:
.withLoadBalancingPolicy(New TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().build()))
เปเบฅเบฐเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบซเบผเบดเป‰เบ™เบ›เบฐเบกเบฒเบ™เบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฐเบ—เบนเป‰. เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:
4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, 100 เบเบฐเบ—เบนเป‰, batch = 1 (เบชเบดเป‰เบ™เป‚เบ”เบเบชเบดเป‰เบ™): 301 ops
4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, 100 เบเบฐเบ—เบนเป‰, batch = 10: 447 ops
4 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, 100 เบเบฐเบ—เบนเป‰, batch = 100: 625 ops

เบ•เปเปˆเบกเบฒเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ›เบฑเบšเปเบ•เปˆเบ‡เบญเบทเปˆเบ™เป†, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเบญเบšเบงเบฝเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆเปเบฅเบฐเป€เบžเบตเปˆเบกเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ•เบญเบš.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™