เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ Messenger (เบชเปˆเบงเบ™ 1): เบเบฒเบ™เบญเบญเบเปเบšเบšเบเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™

เบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบ›เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐเป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบญเบญเบเปเบšเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ messenger เบˆเบฒเบ scratch.

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ Messenger (เบชเปˆเบงเบ™ 1): เบเบฒเบ™เบญเบญเบเปเบšเบšเบเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™
เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบฅเบฐเปเบˆเบเบขเบฒเบ, เบ„เบทเบเบฑเบš VKontakte เบซเบผเบท Badoo, เปเบ•เปˆ "เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เปเบกเปˆเบ™", เปเบ•เปˆเบกเบฑเบ™เบ”เบต - เบกเบตเบ›เบฐเป‚เบซเบเบ”, เป„เบงเปเบฅเบฐ เป€เบซเบกเบฒเบฐเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบ™เบถเปˆเบ‡ PostgreSQL - เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบšเปˆเบญเบ™เบซเบ™เบถเปˆเบ‡, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบชเปเบฒเบœเบฑเบ”เบเบฑเบšเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡ sharding, replication เปเบฅเบฐ geo-distributed เบฅเบฐเบšเบปเบš, เปเบ•เปˆเบˆเบฐเบชเบธเบกเปƒเบชเปˆเบเบฒเบ™เปเบเป‰เป„เบ‚เบงเบปเบ‡เบˆเบญเบ™เบžเบฒเบเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 1: เบšเบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เบชเบฐเป€เบžเบฒเบฐ

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

เปเบฅเบฐเบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเบดเบ”เปเบกเปˆเบ™เบซเบเบฑเบ‡?.. เบฅเบญเบ‡เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ Vasily, เบซเบปเบงเปœเป‰เบฒเบžเบฐเปเบ™เบเบžเบฑเบ”เบ—เบฐเบ™เบฒ.

  • "Nikolai, เบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ‡เบฒเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ patch เปƒเบ™เบกเบทเป‰เบ™เบตเป‰!"
    เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เปเปˆเบžเบปเบงเบžเบฑเบ™เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบšเบฒเบ‡ เป€เบญเบเบฐเบชเบฒเบ™.
  • "Kolya, เป€เบˆเบปเป‰เบฒเบˆเบฐเป„เบ› Dota เบ•เบญเบ™เปเบฅเบ‡เบ™เบตเป‰เบšเป?"
    เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ„เบนเปˆ interlocutors เบชเบฒเบกเบฒเบ”เบชเบทเปˆเบชเบฒเบ™เบžเป‰เบญเบกเบเบฑเบ™เป„เบ”เป‰ เปƒเบ™โ€‹เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เบ•เปˆเบฒเบ‡เป†โ€‹.
  • "Peter, Nikolay, เป€เบšเบดเปˆเบ‡เปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ„เบฑเบ”เบ•เบดเบ”เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบเบฒเบ™เบฅเบฒเบ„เบฒเบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบซเบกเปˆ."
    เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เปเป‰เบ„เบงเบฒเบกเบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบกเบต เบœเบนเป‰โ€‹เบฎเบฑเบšโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบ‚เปเป‰เบ„เบงเบฒเบกเบญเบฒเบ”เบกเบต เป„เบŸเบฅเปŒเปเบ™เบš.
  • "Semyon, เป€เบšเบดเปˆเบ‡เบ„เบทเบเบฑเบ™."
    เปเบฅเบฐเบ„เบงเบ™เบˆเบฐเบกเบตเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบˆเบปเบ”เบซเบกเบฒเบเบชเบฐเบšเบฑเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง เป€เบŠเบตเบ™เบชเบฐเบกเบฒเบŠเบดเบเปƒเปเปˆ.

เบ‚เปเปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™ "เบˆเบฐเปเบˆเป‰เบ‡" เปƒเบ™เป€เบงเบฅเบฒเบ™เบตเป‰.

เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบฐเป€เบžเบฒเบฐเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเปเบฅเบฐเบ‚เปเป‰เบˆเปเบฒเบเบฑเบ”เบ—เบตเปˆเปƒเบซเป‰เบกเบฑเบ™, เบเบฒเบ™เบญเบญเบเปเบšเบš เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš schema เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบกเบฑเบ™เป€เบเบทเบญเบšเป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 2: เบงเบปเบ‡เบˆเบญเบ™เบ•เบฒเบกเป€เบซเบ”เบœเบปเบ™เปœเป‰เบญเบเบ—เบตเปˆเบชเบธเบ”

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

เปƒเบซเป‰เปเบเป‰เป„เบ‚เปเบœเบ™เบงเบฒเบ”เบขเปˆเบฒเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบณเบžเบฑเบ™เบ‚เบญเบ‡เบ™เบดเบ•เบดเบšเบธเบเบ„เบปเบ™. เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ‡เปˆเบฒเบเบ‚เบถเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบทเบญเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ—เบตเปˆเบชเบธเบ” เปเบšเบš ER เป‚เบ”เบเบšเปเปˆเบกเบตเบญเบฒเบเบฒเบ™เปเบŠเบเบŠเป‰เบญเบ™เบ‚เบญเบ‡ UML เบซเบผเบท IDEF notations:

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ Messenger (เบชเปˆเบงเบ™ 1): เบเบฒเบ™เบญเบญเบเปเบšเบšเบเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™

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

เปเบ•เป‰เบก เปเบœเบ™เบงเบฒเบ”เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ - เบ„เบปเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเปเบกเปˆเบ™เบœเบนเป‰เบŠเปˆเบฝเบงเบŠเบฒเบ™เปƒเบ™เบเบฒเบ™เบญเปˆเบฒเบ™ UML/IDEF. เปเบ•เปˆเปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเปเบ•เป‰เบก.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 3: เบเบฒเบ™เปเบ•เป‰เบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

เบเปˆเบฝเบงเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบฅเบฐเบŠเบทเปˆเบžเบฒเบเบชเบฐเบซเบ™เบฒเบกเบŠเบทเปˆ "เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ" เบ‚เบญเบ‡เบ—เบปเปˆเบ‡เบ™เบฒเปเบฅเบฐเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เป€เบฅเบทเปˆเบญเบ‡เบ‚เบญเบ‡เบฅเบปเบ”เบŠเบฒเบ”. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ เบ—เบตเปˆเบ™เบตเป‰เบ—เบตเปˆ Tensor เบšเปเปˆเบกเบตเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เปˆเบฒเบ‡เบ›เบฐเป€เบ—เบ”, เปเบฅเบฐ PostgreSQL เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเป‰เบ‡เบŠเบทเปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™ hieroglyphs, เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒ เบซเบธเป‰เบกเบขเบนเปˆเปƒเบ™เบงเบปเบ‡เบขเบทเบกเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบเบ•เบฑเป‰เบ‡เบŠเบทเปˆเบงเบฑเบ”เบ–เบธเบขเปˆเบฒเบ‡เบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™ เปเบฅเบฐเบŠเบฑเบ”เป€เบˆเบ™เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡.
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบซเบผเบฒเบเบ„เบปเบ™เบ‚เบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเบซเบฒเบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบ„เบฑเป‰เบ‡เบ”เบฝเบง, เบšเบฒเบ‡เบ„เบปเบ™เบเปเปˆเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปเบšเบšเบ™เบตเป‰ เบญเบญเบšเป„เบฅเบ™เปŒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™ เปƒเบŠเป‰ UUIDs เป€เบ›เบฑเบ™เบ•เบปเบงเบฅเบฐเบšเบธ เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบซเบ™เปˆเบงเบเบ‡เบฒเบ™เบžเบฒเบเบ™เบญเบ, เปเบ•เปˆเบเบฑเบ‡เบชเปเบฒเบฅเบฑเบšเบงเบฑเบ”เบ–เบธเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบขเบนเปˆเปƒเบ™เบเปˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ - เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบŠเบปเปˆเบงเบ„เบฒเบง, เปเบฅเบฐเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ—เบฐเบเบฑเบ™เปเบกเปˆเบ™เบ•เปเปˆเบฒเบ—เบตเปˆเบชเบธเบ”.

เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบฎเปˆเบฒเบ‡เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ™เบตเป‰:
เบ•เบฒเบ•เบฐเบฅเบฒเบ‡: RU

CREATE TABLE "ะขะตะผะฐ"(
  "ะขะตะผะฐ"
    uuid
      PRIMARY KEY
, "ะ”ะพะบัƒะผะตะฝั‚"
    uuid
, "ะะฐะทะฒะฐะฝะธะต"
    text
);

CREATE TABLE "ะกะพะพะฑั‰ะตะฝะธะต"(
  "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
      PRIMARY KEY
, "ะขะตะผะฐ"
    uuid
, "ะะฒั‚ะพั€"
    uuid
, "ะ”ะฐั‚ะฐะ’ั€ะตะผั"
    timestamp
, "ะขะตะบัั‚"
    text
);

CREATE TABLE "ะะดั€ะตัะฐั‚"(
  "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, "ะŸะตั€ัะพะฝะฐ"
    uuid
, PRIMARY KEY("ะกะพะพะฑั‰ะตะฝะธะต", "ะŸะตั€ัะพะฝะฐ")
);

CREATE TABLE "ะคะฐะนะป"(
  "ะคะฐะนะป"
    uuid
      PRIMARY KEY
, "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, "BLOB"
    uuid
, "ะ˜ะผั"
    text
);

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡: EN

CREATE TABLE theme(
  theme
    uuid
      PRIMARY KEY
, document
    uuid
, title
    text
);

CREATE TABLE message(
  message
    uuid
      PRIMARY KEY
, theme
    uuid
, author
    uuid
, dt
    timestamp
, body
    text
);

CREATE TABLE message_addressee(
  message
    uuid
, person
    uuid
, PRIMARY KEY(message, person)
);

CREATE TABLE message_file(
  file
    uuid
      PRIMARY KEY
, message
    uuid
, content
    uuid
, filename
    text
);

เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบฎเบนเบšเปเบšเบšเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ "unwinding" เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบญเป‰เบฒเบ‡เบญเบตเบ‡ เบ”เป‰เบงเบโ€‹เบ•เบปเบ™โ€‹เป€เบญเบ‡โ€‹เป€เบžเบทเปˆเบญโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เปƒเบœ.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 4: เบŠเบญเบเบซเบฒเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™

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

เปƒเบซเป‰เป€เบฎเบปเบฒเปƒเบชเปˆเป€เบเบตเบšเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ - เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบกเบฑเบ™?

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

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

เบงเบฝเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบ•เบฑเป‰เบ‡เปƒเบˆเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเป‰เบฒเบซเบฒเบ™ เบ‚เป‰เบฒเบกโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบ•เบฐโ€‹เบžเบฑเบ™โ€‹.

เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต 5: Smart Denormalization

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

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡: RU

CREATE TABLE "ะ ะตะตัั‚ั€ะกะพะพะฑั‰ะตะฝะธะน"(
  "ะ’ะปะฐะดะตะปะตั†"
    uuid
, "ะขะธะฟะ ะตะตัั‚ั€ะฐ"
    smallint
, "ะ”ะฐั‚ะฐะ’ั€ะตะผั"
    timestamp
, "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
, PRIMARY KEY("ะ’ะปะฐะดะตะปะตั†", "ะขะธะฟะ ะตะตัั‚ั€ะฐ", "ะกะพะพะฑั‰ะตะฝะธะต")
);
CREATE INDEX ON "ะ ะตะตัั‚ั€ะกะพะพะฑั‰ะตะฝะธะน"("ะ’ะปะฐะดะตะปะตั†", "ะขะธะฟะ ะตะตัั‚ั€ะฐ", "ะ”ะฐั‚ะฐะ’ั€ะตะผั" DESC);

CREATE TABLE "ะฃั‡ะฐัั‚ะฝะธะบะขะตะผั‹"(
  "ะขะตะผะฐ"
    uuid
, "ะŸะตั€ัะพะฝะฐ"
    uuid
, PRIMARY KEY("ะขะตะผะฐ", "ะŸะตั€ัะพะฝะฐ")
);

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡: EN

CREATE TABLE message_registry(
  owner
    uuid
, registry
    smallint
, dt
    timestamp
, message
    uuid
, PRIMARY KEY(owner, registry, message)
);
CREATE INDEX ON message_registry(owner, registry, dt DESC);

CREATE TABLE theme_participant(
  theme
    uuid
, person
    uuid
, PRIMARY KEY(theme, person)
);

เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป„เบ”เป‰โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบญเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบŠเปˆเบงเบโ€‹:

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

เปƒเบ™เบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบš เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹ เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

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

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