Cassandra. เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบšเปเปˆเปƒเบซเป‰เบ•เบฒเบเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบˆเบฑเบ Oracle

Hey Habr.

เบ‚เป‰เบญเบเบŠเบทเปˆ Misha Butrimov, เบ‚เป‰เบญเบเบขเบฒเบเบšเบญเบเป€เบˆเบปเป‰เบฒเป€เบฅเบฑเบเบ™เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบš Cassandra. เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เปเปˆเบœเบนเป‰เบ—เบตเปˆเบšเปเปˆเป€เบ„เบตเบเบžเบปเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ NoSQL - เบกเบฑเบ™เบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเปเบฅเบฐเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบš. เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป„เบ”เป‰เป€เบซเบฑเบ™เบญเบฑเบ™เปƒเบ”เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบ Oracle เบซเบผเบทเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบญเบทเปˆเบ™เป†, เบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ.

เบกเบตเบซเบเบฑเบ‡เบ”เบตเบเปˆเบฝเบงเบเบฑเบš Cassandra? เบกเบฑเบ™เป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ NoSQL เบ—เบตเปˆเบ–เบทเบเบญเบญเบเปเบšเบšเป‚เบ”เบเบšเปเปˆเบกเบตเบˆเบธเบ”เบ”เบฝเบงเบ‚เบญเบ‡เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เบฐเบซเบ™เบฒเบ”เป„เบ”เป‰เบ”เบต. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบชเบญเบ‡เบชเบฒเบก terabytes เบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบก nodes เปƒเบ™เบงเบปเบ‡. เบ‚เบฐเบซเบเบฒเบเบกเบฑเบ™เป„เบ›เบซเบฒเบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™เบšเป? เป€เบžเบตเปˆเบก nodes เปƒเบชเปˆเบเบธเปˆเบก. เป€เบžเบตเปˆเบก RPS เบ›เบธเบ‡เปเบ•เปˆเบ‡? เป€เบžเบตเปˆเบก nodes เปƒเบชเปˆเบเบธเปˆเบก. เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบ„เบทเบเบฑเบ™.

Cassandra. เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบšเปเปˆเปƒเบซเป‰เบ•เบฒเบเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบˆเบฑเบ Oracle

เปเบกเปˆเบ™เบซเบเบฑเบ‡เบญเบตเบเปเบ”เปˆเบ—เบตเปˆเบ™เบฒเบ‡เป€เบเบฑเปˆเบ‡? เบกเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบซเบผเบฒเบ. เปเบ•เปˆเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเปƒเบ”? 10, 20, 30, 40 เบžเบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปเบกเปˆเบ™เบšเปเปˆเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”. 100 เบžเบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ - เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™. เบกเบตเบšเปเบฅเบดเบชเบฑเบ”เบ—เบตเปˆเบเปˆเบฒเบงเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบฎเบฑเบเบชเบฒ 2 เบฅเป‰เบฒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบžเบงเบเป€เบ‚เบปเบฒเบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เป€เบŠเบทเปˆเบญเบกเบฑเบ™.

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

เบšเปเปˆเปเบกเปˆเบ™เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ„เบทเบเบฑเบ™

เป€เบกเบทเปˆเบญเป€เบžเบทเปˆเบญเบ™เบฎเปˆเบงเบกเบ‡เบฒเบ™เบกเบฒเบซเบฒเบ‚เป‰เบญเบเปเบฅเบฐเบ–เบฒเบกเบงเปˆเบฒ: "เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฒเบชเบฒเปเบšเบšเบชเบญเบšเบ–เบฒเบก CQL Cassandra, เปเบฅเบฐเบกเบฑเบ™เบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบฅเบทเบญเบ, เบกเบฑเบ™เบกเบตเบšเปˆเบญเบ™เปƒเบ”, เบกเบฑเบ™เบกเบตเปเบฅเบฐ. เบ‚เป‰เบญเบเบ‚เบฝเบ™เบˆเบปเบ”เบซเบกเบฒเบเปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบœเบปเบ™. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡?" เบเบฒเบ™เบ›เบดเปˆเบ™เบ›เบปเบง Cassandra เบ„เบทเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เปเบšเบšเบ—เบตเปˆเบˆเบฐเบ‚เป‰เบฒเบ•เบปเบงเบ•เบฒเบเบ—เบตเปˆเบฎเบธเบ™เปเบฎเบ‡. เปเบฅเบฐเบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เป€เบชเบตเบกเบกเบฑเบ™, เบกเบฑเบ™เบ–เบทเบเบซเป‰เบฒเบกเปƒเบ™เบฅเบฑเบ”เป€เบŠเบ. เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบญเบญเบเปเบšเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบฅเบนเบเบ„เป‰เบฒเบกเบฒเบซเบฒเบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ: "เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบŠเบธเบ”เป‚เบ—เบฅเบฐเบ—เบฑเบ”, เบซเบผเบทเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบเบฒเบ™เบชเบนเบ”เบญเบฒเบซเบฒเบ™. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบกเบตโ€‹เบญเบฒโ€‹เบซเบฒเบ™โ€‹เบขเบนเปˆโ€‹เบ—เบตเปˆโ€‹เบ™เบฑเป‰เบ™ เบซเบผเบทโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เป‚เบ—เบฅเบฐโ€‹เบžเบฒเบš เปเบฅเบฐโ€‹เบ™เบฑเบโ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบ™โ€‹เบ™เบฑเป‰เบ™.โ€ เบžเบงเบเป€เบฎเบปเบฒเป€เบงเบปเป‰เบฒเบ”เป‰เบงเบเบ„เบงเบฒเบกเบเบดเบ™เบ”เบตเบงเปˆเบฒ: โ€œเป„เบ›เบเบฑเบ™เป€เบฅเบตเบ!โ€ เบžเบฝเบ‡เปเบ•เปˆเบชเบปเปˆเบ‡เบชเบญเบ‡ bytes, เบชเบญเบ‡เบชเบฒเบกเบชเบฑเบ™เบเบฒเบ™เปเบฅเบฐเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบซเบผเบฒเบเป„เบงเปเบฅเบฐเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰. เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ”เบตเบˆเบปเบ™เบเปˆเบงเบฒเบฅเบนเบเบ„เป‰เบฒเบกเบฒเปเบฅเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒเปเบกเปˆเบšเป‰เบฒเบ™เบเบฑเบ‡เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก: เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบตเบฅเบฒเบเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™, เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบขเบฒเบเบฎเบนเป‰เบงเปˆเบฒเบญเบฒเบซเบฒเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบ•เปˆเบ‡เบเบดเบ™. เป€เบˆเบปเป‰เบฒเบ•เบฒเบเปเบฅเป‰เบง.

เบ™เบตเป‰เปเบกเปˆเบ™เบเป‰เบญเบ™เบงเปˆเบฒ Cassandra เป€เบ›เบฑเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบชเบปเบก: เบกเบฑเบ™เบžเป‰เบญเบกเป†เบเบฑเบ™เปƒเบซเป‰เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปเบฅเบฐเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เปƒเบ™เบ–เบฑเบ™เบเบงเป‰เบฒเบ‡. เปƒเบ™ Java เบซเบผเบท Kotlin, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบญเบฐเบ—เบดเบšเบฒเบเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเปเบœเบ™เบ—เบตเปˆเบˆเบฑเบ”เบฎเบฝเบ‡. เบเบธเบ™เปเบˆเบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เปเบœเบ™เบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบธเปˆเบกเปเบ–เบง เบซเบผเบท เบเบฐเปเบˆ Partition - เบ›เบธเปˆเบกเปเบšเปˆเบ‡เบชเปˆเบงเบ™. เบเบธเบ™เปเบˆเบ—เบตเบชเบญเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเบธเบ™เปเบˆเบ‚เบญเบ‡เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบˆเบฑเบ”เบฎเบฝเบ‡เปเบฅเป‰เบง, เปเบกเปˆเบ™เบเบฐเปเบˆเบเบฒเบ™เบˆเบฑเบ”เบเบธเปˆเบก.

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

Cassandra. เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบšเปเปˆเปƒเบซเป‰เบ•เบฒเบเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบˆเบฑเบ Oracle

เบ•เบปเบงเป€เบฅเบเบ™เบตเป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ hash, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” Partition. เบ™เบตเป‰เปเบกเปˆเบ™เบ–เบฑเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบซเบผเบฑเบเบซเบผเบฑเบ, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฅเปเบฒเบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบธเบ™เปเบˆเบ—เปเบฒเบญเบดเบ” เปเบฅเบฐเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เปเบœเบ™เบ—เบตเปˆ. เบกเบฑเบ™เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒ node เปƒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบ”. เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™ Cassandra เบ”เป‰เบงเบ syntax เป€เบเบทเบญเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบš SQL:

CREATE TABLE users (
	user_id uu id,
	name text,
	year int,
	salary float,
	PRIMARY KEY(user_id)

)

เบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบ™เบถเปˆเบ‡เบ–เบฑเบ™, เปเบฅเบฐเบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เบเบฐเปเบˆเปเบšเปˆเบ‡เบชเปˆเบงเบ™.

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

Cassandra. เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบšเปเปˆเปƒเบซเป‰เบ•เบฒเบเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบˆเบฑเบ Oracle

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

เปƒเบซเป‰เบ‚เบฝเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเป€เบฅเบทเบญเบเบšเบฒเบ‡: select * from users where, userid = . เบกเบฑเบ™ turns เบญเบญเบเบ„เป‰เบฒเบเบ„เบทเปƒเบ™ Oracle: เบžเบงเบเป€เบฎเบปเบฒเบ‚เบฝเบ™เป€เบฅเบทเบญเบ, เบเปเบฒเบ™เบปเบ”เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบฅเบฐเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ, เบœเบนเป‰เปƒเบŠเป‰เป„เบ”เป‰เบฎเบฑเบšเบกเบฑเบ™. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบ›เบตเป€เบเบตเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, Cassandra เบˆเบปเปˆเบกเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเป„เบ”เป‰. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบฒเบ‡เบšเปเปˆเบฎเบนเป‰เบซเบเบฑเบ‡เป€เบฅเบตเบเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปเบˆเบเบขเบฒเบเบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบตเป€เบเบตเบ” - เบ™เบฒเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฅเปเบฒเบ”เบฝเบงเบ—เบตเปˆเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ›เบฑเบ™เบเบฐเปเบˆ. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ™เบฒเบ‡เป€เบงเบปเป‰เบฒเบงเปˆเบฒ, โ€œเบ•เบปเบเบฅเบปเบ‡, เบ‚เป‰เบญเบเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰. เป€เบžเบตเปˆเบกเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡." เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบ„เปเบฒเบชเบฑเปˆเบ‡, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบฎเบฑเบ”เบงเบฝเบ. เปเบฅเบฐเปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเป€เบเบตเบ”เบ‚เบถเป‰เบ™.

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

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

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

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

CREATE TABLE users_by_year_salary_id (
	user_id uuid,
	name text,
	year int,
	salary float,
	PRIMARY KEY((year), salary, user_id)

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

เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เปเบฅเบฐเบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”

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

Cassandra. เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบšเปเปˆเปƒเบซเป‰เบ•เบฒเบเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบˆเบฑเบ Oracle

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

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

เปƒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™, เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบซเบกเปˆ

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

เบžเบงเบเป€เบฎเบปเบฒเบŠเบทเป‰เบ‚เบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™ denormalized เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบ”เบตเปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เบเบธเปˆเบกเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบชเบฒเบกเบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบซเป‰เบฒ nodes, เบกเบตเบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบเบญเบกเบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™ (เป€เบกเบทเปˆเบญเบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบชเบนเบ™เป€เบชเบ), เบชเบฒเบกเบฒเบ”เบขเบนเปˆเบฅเบญเบ”เบ•เบฒเบเบ‚เบญเบ‡เบชเบนเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบ™เบถเปˆเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™. เปเบฅเบฐเบญเบตเบเบชเบญเบ‡เบ‚เปเป‰เปƒเบ™เปเบ•เปˆเบฅเบฐเบชเบญเบ‡เบญเบฑเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญ. เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบตเป‰, เบšเบฑเบ™เบซเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เบŠเปเป‰เบฒเบŠเป‰เบญเบ™เบ—เบตเปˆเบ”เบตเบซเบผเบฒเบ, เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบชเบญเบ‡เป„เบ”เบฃเบŸเปŒ SSD เปเบฅเบฐเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบžเบดเป€เบชเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบžเบทเปˆเบญเปƒเบŠเป‰ Cassandra, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป€เบ„เบตเบเป€เบ›เบฑเบ™ SQL, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบžเบฑเบ™, เบ„เบตเบ•เปˆเบฒเบ‡เบ›เบฐเป€เบ—เบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‡เปˆเบฒเบเป†.

เบžเบงเบเป€เบฎเบปเบฒเบญเบญเบเปเบšเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ•เบฒเบกเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เบชเบดเปˆเบ‡เบ—เบตเปˆ เบชเบณ เบ„เบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบกเบฑเบ™. เบ–เป‰เบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ”เป‰เบงเบเบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบทเบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เปƒเบ™เบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบญเบปเบฒเบกเบฑเบ™เป„เบงเป‰เปƒเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบงเปƒเบ™ Full Scan เปเบฅเบฐ Cassandra เบˆเบฐเบšเปเปˆเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเป‚เบซเบเบ”เปƒเบ”เป†.

Denormalizing เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™. เบžเบงเบเป€เบฎเบปเบฒเบฅเบทเบกเบเปˆเบฝเบงเบเบฑเบšเปเบšเบšเบŸเบญเบกเบ›เบปเบเบเบฐเบ•เบด, เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบกเบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบญเบตเบเบ•เปเปˆเป„เบ›. เบ–เป‰เบฒเป€เบฎเบปเบฒเบงเบฒเบ‡เบฅเบปเบ‡ 100 เป€เบ—เบทเปˆเบญ เบกเบฑเบ™เบˆเบฐเบ™เบญเบ™เบฅเบปเบ‡ 100 เป€เบ—เบทเปˆเบญ. เบกเบฑเบ™เบเบฑเบ‡เบฅเบฒเบ„เบฒเบ–เบทเบเบเบงเปˆเบฒเบเบฒเบ™เบขเบธเบ”เป€เบŠเบปเบฒ.

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

เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เปเบกเปˆเบ™เป€เบฅเบทเบญเบเปœเบถเปˆเบ‡เบ„เบฑเป‰เบ‡เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡ Clustering Key. เบ–เป‰เบฒเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เป‰เบญเบ‡เบ›เบฑเบšเบ›เบธเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ”เป‰เบงเบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”: เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เปƒเบ™ 100 เบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบต 100 เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

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

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