ืžืกื“ ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 2): ื—ืœื•ืงื” ืœืžื—ื™ืฆื•ืช "ืœืžื˜ืจื•ืช ืจื•ื•ื—"

ืขื™ืฆื‘ื ื• ื‘ื”ืฆืœื—ื” ืืช ื”ืžื‘ื ื” ืฉืœ ืžืกื“ ื”ื ืชื•ื ื™ื PostgreSQL ืฉืœื ื• ืœืื—ืกื•ืŸ ื”ืชื›ืชื‘ื•ื™ื•ืช, ืขื‘ืจื” ืฉื ื”, ื”ืžืฉืชืžืฉื™ื ืžืžืœืื™ื ืื•ืชื• ื‘ืื•ืคืŸ ืคืขื™ืœ, ื•ืขื›ืฉื™ื• ื”ื•ื ืžื›ื™ืœ ืžื™ืœื™ื•ื ื™ ืจืฉื•ืžื•ืช, ื•... ืžืฉื”ื• ื”ืชื—ื™ืœ ืœื”ืื˜.

ืžืกื“ ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 2): ื—ืœื•ืงื” ืœืžื—ื™ืฆื•ืช "ืœืžื˜ืจื•ืช ืจื•ื•ื—"
ืขื•ื‘ื“ื” ื”ื™ื ื›ื™ ื›ื›ืœ ืฉื’ื•ื“ืœ ื”ื˜ื‘ืœื” ื’ื“ืœ, ื›ืš ื’ื "ืขื•ืžืง" ื”ืื™ื ื“ืงืกื™ื ื’ื“ืœ. - ืื ื›ื™ ืœื•ื’ืจื™ืชืžื™ืช. ืื‘ืœ ืœืื•ืจืš ื–ืžืŸ ื–ื” ืžืืœืฅ ืืช ื”ืฉืจืช ืœื‘ืฆืข ืืช ืื•ืชืŸ ืžืฉื™ืžื•ืช ืงืจื™ืื”/ื›ืชื™ื‘ื” ืœืขื‘ื“ ืคื™ ื”ืจื‘ื” ื™ื•ืชืจ ื“ืคื™ ื ืชื•ื ื™ืืžืืฉืจ ื‘ื”ืชื—ืœื”.

ื›ืืŸ ื–ื” ื‘ื ืœื”ืฆืœื” ื—ืชืš.

ื”ืจืฉื• ืœื™ ืœืฆื™ื™ืŸ ืฉืื™ื ื ื• ืžื“ื‘ืจื™ื ืขืœ ืคื™ืฆื•ืœ, ื›ืœื•ืžืจ ื”ืคืฆืช ื ืชื•ื ื™ื ื‘ื™ืŸ ืžืกื“ื™ ื ืชื•ื ื™ื ืื• ืฉืจืชื™ื ืฉื•ื ื™ื. ื›ื™ ืืคื™ืœื• ื—ืœื•ืงืช ื”ื ืชื•ื ื™ื ืœ ื›ืžื” ืฉืจืชื™ื, ืœื ืชื™ืคื˜ืจ ืžื‘ืขื™ื™ืช "ื”ืชื ืคื—ื•ืช" ื”ืื™ื ื“ืงืกื™ื ืœืื•ืจืš ื–ืžืŸ. ื‘ืจื•ืจ ืฉืื ืืชื” ื™ื›ื•ืœ ืœื”ืจืฉื•ืช ืœืขืฆืžืš ืœื”ืคืขื™ืœ ืฉืจืช ื—ื“ืฉ ื‘ื›ืœ ื™ื•ื, ืื– ื”ื‘ืขื™ื•ืช ืฉืœืš ืœื ื™ื”ื™ื• ืขื•ื“ ื‘ื›ืœืœ ื‘ืžื™ืฉื•ืจ ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ืกืคืฆื™ืคื™.

ื ืฉืงื•ืœ ืœื ืกืงืจื™ืคื˜ื™ื ืกืคืฆื™ืคื™ื™ื ืœื™ื™ืฉื•ื ืžื—ื™ืฆื•ืช "ื‘ื—ื•ืžืจื”", ืืœื ืืช ื”ื’ื™ืฉื” ืขืฆืžื” - ืžื” ื•ืื™ืš ืฆืจื™ืš "ืœื—ืชื•ืš ืœืคืจื•ืกื•ืช", ื•ืœืžื” ืจืฆื•ืŸ ื›ื–ื” ืžื•ื‘ื™ืœ.

ืžื•ึผืฉื‚ึธื’

ื‘ื•ืื• ื ื’ื“ื™ืจ ืฉื•ื‘ ืืช ื”ืžื˜ืจื” ืฉืœื ื•: ืื ื—ื ื• ืจื•ืฆื™ื ืœื•ื•ื“ื ืฉื”ื™ื•ื, ืžื—ืจ ื•ื‘ืขื•ื“ ืฉื ื”, ื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ื ืงืจืืช ืขืœ ื™ื“ื™ PostgreSQL ื‘ืžื”ืœืš ื›ืœ ืคืขื•ืœืช ืงืจื™ืื”/ื›ืชื™ื‘ื” ืชื™ืฉืืจ ื–ื”ื”.

ืœื›ืœ ื ืชื•ื ื™ื ืฉื ืฆื‘ืจื• ื‘ืื•ืคืŸ ื›ืจื•ื ื•ืœื•ื’ื™ (ื”ื•ื“ืขื•ืช, ืžืกืžื›ื™ื, ื™ื•ืžื ื™ื, ืืจื›ื™ื•ื ื™ื,...) ื”ื‘ื—ื™ืจื” ื”ื˜ื‘ืขื™ืช ื›ืžืคืชื— ืžื—ื™ืฆื” ื”ื™ื ืชืืจื™ืš/ืฉืขื” ืฉืœ ื”ืื™ืจื•ืข. ื‘ืžืงืจื” ืฉืœื ื•, ืื™ืจื•ืข ื›ื–ื” ื”ื•ื ืจื’ืข ืฉืœื™ื—ืช ื”ื”ื•ื“ืขื”.

ืฉื™ืžื• ืœื‘ ืฉืžืฉืชืžืฉื™ื ื›ืžืขื˜ ืชืžื™ื“ ืœืขื‘ื•ื“ ืจืง ืขื ื”"ืขื“ื›ื ื™ื™ื ื‘ื™ื•ืชืจ". ื ืชื•ื ื™ื ื›ืืœื” - ื”ื ืงื•ืจืื™ื ืืช ื”ื”ื•ื“ืขื•ืช ื”ืื—ืจื•ื ื•ืช, ืžื ืชื—ื™ื ืืช ื”ื™ื•ืžื ื™ื ื”ืื—ืจื•ื ื™ื,... ืœื, ื›ืžื•ื‘ืŸ, ื”ื ื™ื›ื•ืœื™ื ืœื’ืœื•ืœ ืื—ื•ืจื” ื‘ื–ืžืŸ, ืื‘ืœ ื”ื ืขื•ืฉื™ื ื–ืืช ืœืขืชื™ื ืจื—ื•ืงื•ืช ืžืื•ื“.

ืžื”ืื™ืœื•ืฆื™ื ื”ืœืœื• ื‘ืจื•ืจ ืฉืคืชืจื•ืŸ ื”ืžืกืจ ื”ืื•ืคื˜ื™ืžืœื™ ื™ื”ื™ื” ืงื˜ืขื™ื "ื™ื•ืžื™ื™ื". - ืื—ืจื™ ื”ื›ืœ, ื”ืžืฉืชืžืฉ ืฉืœื ื• ื™ืงืจื ื›ืžืขื˜ ืชืžื™ื“ ืืช ืžื” ืฉื‘ื ืœื• "ื”ื™ื•ื" ืื• "ืืชืžื•ืœ".

ืื ืื ื—ื ื• ื›ื•ืชื‘ื™ื ื•ืงื•ืจืื™ื ื›ืžืขื˜ ืจืง ื‘ืงื˜ืข ืื—ื“ ื‘ืžื”ืœืš ื”ื™ื•ื, ืื– ื–ื” ื’ื ื ื•ืชืŸ ืœื ื• ืฉื™ืžื•ืฉ ื™ืขื™ืœ ื™ื•ืชืจ ื‘ื–ื™ื›ืจื•ืŸ ื•ื‘ื“ื™ืกืง - ืžื›ื™ื•ื•ืŸ ืฉื›ืœ ืื™ื ื“ืงืกื™ ื”ืกืขื™ืคื™ื ืžืชืื™ืžื™ื ื‘ืงืœื•ืช ืœ-RAM, ื‘ื ื™ื’ื•ื“ ืœืืœื• "ื”ื’ื“ื•ืœื™ื ื•ื”ืฉืžื ื™ื" ื‘ื›ืœ ื”ื˜ื‘ืœื”.

ืฆืขื“ ืื—ืจ ืฆืขื“

ื‘ืื•ืคืŸ ื›ืœืœื™, ื›ืœ ืžื” ืฉื ืืžืจ ืœืžืขืœื” ื ืฉืžืข ื›ืžื• ืจื•ื•ื— ืื—ื“ ืžืชืžืฉืš. ื•ื–ื” ื‘ืจ ื”ืฉื’ื”, ืื‘ืœ ื‘ืฉื‘ื™ืœ ื–ื” ื ืฆื˜ืจืš ืœื”ืชืืžืฅ - ื›ื™ ื”ื”ื—ืœื˜ื” ืœื—ืœืง ืืช ืื—ื“ ื”ื™ืฉื•ื™ื•ืช ืžื•ื‘ื™ืœื” ืœืฆื•ืจืš "ืœืจืื•ืช" ืืช ื”ืžืฉื•ื™ืš.

ืžืกืจ, ืชื›ื•ื ื•ืชื™ื• ื•ืชื—ื–ื™ื•ืชื™ื•

ืžื›ื™ื•ื•ืŸ ืฉื”ื—ืœื˜ื ื• ืœื—ืชื•ืš ื”ื•ื“ืขื•ืช ืœืคื™ ืชืืจื™ื›ื™ื, ื”ื’ื™ื•ื ื™ ืœื—ืœืง ื’ื ืืช ื”ื™ืฉื•ื™ื•ืช-ื”ืžืืคื™ื™ื ื™ื ื”ืชืœื•ื™ื™ื ื‘ื”ืŸ (ืงื‘ืฆื™ื ืžืฆื•ืจืคื™ื, ืจืฉื™ืžืช ื ืžืขื ื™ื), ื•ื›ืŸ ื’ื ืœืคื™ ืชืืจื™ืš ื”ื”ื•ื“ืขื”.

ืžื›ื™ื•ื•ืŸ ืฉืื—ืช ื”ืžืฉื™ืžื•ืช ื”ืื•ืคื™ื™ื ื™ื•ืช ืฉืœื ื• ื”ื™ื ื‘ื“ื™ื•ืง ืฆืคื™ื™ื” ื‘ืจื™ืฉื•ืžื™ ื”ื•ื“ืขื•ืช (ืฉืœื ื ืงืจืื•, ื ื›ื ืกื•ืช, ื”ื›ืœ), ื–ื” ื’ื ื”ื’ื™ื•ื ื™ "ืœืžืฉื•ืš ืื•ืชื" ืœื—ืœื•ืงื” ืœืคื™ ืชืืจื™ื›ื™ ื”ื•ื“ืขื•ืช.

ืžืกื“ ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 2): ื—ืœื•ืงื” ืœืžื—ื™ืฆื•ืช "ืœืžื˜ืจื•ืช ืจื•ื•ื—"

ืื ื• ืžื•ืกื™ืคื™ื ืืช ืžืคืชื— ื”ืžื—ื™ืฆื•ืช (ืชืืจื™ืš ื”ื”ื•ื“ืขื”) ืœื›ืœ ื”ื˜ื‘ืœืื•ืช: ื ืžืขื ื™ื, ืงื•ื‘ืฅ, ืจื™ืฉื•ื. ืื™ื ืš ืฆืจื™ืš ืœื”ื•ืกื™ืฃ ืื•ืชื• ืœื”ื•ื“ืขื” ืขืฆืžื”, ืืœื ืœื”ืฉืชืžืฉ ื‘-DateTime ื”ืงื™ื™ื.

ืืฉื›ื•ืœื•ืช

ืžื›ื™ื•ื•ืŸ ืฉื™ืฉ ืจืง ื ื•ืฉื ืื—ื“ ืœืžืกืคืจ ื”ื•ื“ืขื•ืช, ืื™ืŸ ื“ืจืš "ืœื—ืชื•ืš" ืื•ืชื• ื‘ืื•ืชื• ื“ื’ื; ืืชื” ืฆืจื™ืš ืœื”ืกืชืžืš ืขืœ ืžืฉื”ื• ืื—ืจ. ื‘ืžืงืจื” ืฉืœื ื• ื–ื” ืื™ื“ื™ืืœื™ ืชืืจื™ืš ื”ื”ื•ื“ืขื” ื”ืจืืฉื•ื ื” ื‘ื”ืชื›ืชื‘ื•ืช - ื›ืœื•ืžืจ, ืจื’ืข ื”ื™ืฆื™ืจื”, ืœืžืขืฉื”, ืฉืœ ื”ื ื•ืฉื.

ืžืกื“ ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 2): ื—ืœื•ืงื” ืœืžื—ื™ืฆื•ืช "ืœืžื˜ืจื•ืช ืจื•ื•ื—"

ื”ื•ืกืฃ ืืช ืžืคืชื— ื”ื—ืœื•ืงื” (ืชืืจื™ืš ื”ื ื•ืฉื) ืœื›ืœ ื”ื˜ื‘ืœืื•ืช: ื ื•ืฉื, ืžืฉืชืชืฃ.

ืื‘ืœ ืขื›ืฉื™ื• ื™ืฉ ืœื ื• ืฉืชื™ ื‘ืขื™ื•ืช ื‘ื‘ืช ืื—ืช:

  • ื‘ืื™ื–ื” ื—ืœืง ืขืœื™ ืœื—ืคืฉ ื”ื•ื“ืขื•ืช ื‘ื ื•ืฉื?
  • ื‘ืื™ื–ื” ื—ืœืง ืขืœื™ ืœื—ืคืฉ ืืช ื”ื ื•ืฉื ืžื”ื”ื•ื“ืขื”?

ืื ื—ื ื• ื™ื›ื•ืœื™ื ื›ืžื•ื‘ืŸ ืœื”ืžืฉื™ืš ืœื—ืคืฉ ื‘ื›ืœ ื”ืกืขื™ืคื™ื, ืื‘ืœ ื–ื” ื™ื”ื™ื” ืขืฆื•ื‘ ืžืื•ื“ ื•ื™ืฉืœื•ืœ ืืช ื›ืœ ื”ื–ื›ื™ื•ืช ืฉืœื ื•. ืœื›ืŸ, ื›ื“ื™ ืœื“ืขืช ื”ื™ื›ืŸ ื‘ื“ื™ื•ืง ืœื—ืคืฉ, ื ื‘ืฆืข ืงื™ืฉื•ืจื™ื/ืžืฆื‘ื™ืขื™ื ืœื•ื’ื™ื™ื ืœืงื˜ืขื™ื:

  • ื ื•ืกื™ืฃ ื‘ื”ื•ื“ืขื” ืฉื“ื” ืชืืจื™ืš ื ื•ืฉื
  • ื‘ื•ืื• ื ื•ืกื™ืฃ ืœื ื•ืฉื ืชืืจื™ืš ื”ื”ื•ื“ืขื” ื ืงื‘ืข ื”ืชื›ืชื‘ื•ืช ื–ื• (ื™ื›ื•ืœื” ืœื”ื™ื•ืช ื˜ื‘ืœื” ื ืคืจื“ืช, ืื• ืžืขืจืš ืฉืœ ืชืืจื™ื›ื™ื)

ืžืกื“ ื ืชื•ื ื™ื ืฉืœ Messenger (ื—ืœืง 2): ื—ืœื•ืงื” ืœืžื—ื™ืฆื•ืช "ืœืžื˜ืจื•ืช ืจื•ื•ื—"

ืžื›ื™ื•ื•ืŸ ืฉื™ื”ื™ื• ืžืขื˜ ืฉื™ื ื•ื™ื™ื ื‘ืจืฉื™ืžืช ืชืืจื™ื›ื™ ื”ื”ื•ื“ืขื•ืช ืขื‘ื•ืจ ื›ืœ ื”ืชื›ืชื‘ื•ืช ื‘ื•ื“ื“ืช (ื”ืจื™ ื›ืžืขื˜ ื›ืœ ื”ื”ื•ื“ืขื•ืช ื ื•ืคืœื•ืช ืขืœ 1-2 ื™ืžื™ื ืกืžื•ื›ื™ื), ืืชืžืงื“ ื‘ืืคืฉืจื•ืช ื–ื•.

ื‘ืกืš ื”ื›ืœ, ืžื‘ื ื” ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœื ื• ืงื™ื‘ืœ ืืช ื”ืฆื•ืจื” ื”ื‘ืื”, ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ื—ืœื•ืงื” ืœืžื—ื™ืฆื•ืช:

ื˜ื‘ืœืื•ืช: RU, ืื ื™ืฉ ืœืš ืกืœื™ื“ื” ืžื”ืืœืคื‘ื™ืช ื”ืงื™ืจื™ืœื™ ื‘ืฉืžื•ืช ืฉืœ ื˜ื‘ืœืื•ืช/ืฉื“ื•ืช, ืขื“ื™ืฃ ืœื ืœื”ืกืชื›ืœ

-- ัะตะบั†ะธะธ ะฟะพ ะดะฐั‚ะต ัะพะพะฑั‰ะตะฝะธั
CREATE TABLE "ะกะพะพะฑั‰ะตะฝะธะต_YYYYMMDD"(
  "ะกะพะพะฑั‰ะตะฝะธะต"
    uuid
      PRIMARY KEY
, "ะขะตะผะฐ"
    uuid
, "ะ”ะฐั‚ะฐะขะตะผั‹"
    date
, "ะะฒั‚ะพั€"
    uuid
, "ะ”ะฐั‚ะฐะ’ั€ะตะผั" -- ะธัะฟะพะปัŒะทัƒะตะผ ะบะฐะบ ะดะฐั‚ัƒ
    timestamp
, "ะขะตะบัั‚"
    text
);

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

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

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

-- ัะตะบั†ะธะธ ะฟะพ ะดะฐั‚ะต ั‚ะตะผั‹
CREATE TABLE "ะขะตะผะฐ_YYYYMMDD"(
  "ะ”ะฐั‚ะฐะขะตะผั‹"
    date
, "ะขะตะผะฐ"
    uuid
      PRIMARY KEY
, "ะ”ะพะบัƒะผะตะฝั‚"
    uuid
, "ะะฐะทะฒะฐะฝะธะต"
    text
);

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

CREATE TABLE "ะ”ะฐั‚ั‹ะกะพะพะฑั‰ะตะฝะธะนะขะตะผั‹_YYYYMMDD"(
  "ะ”ะฐั‚ะฐะขะตะผั‹"
    date
, "ะขะตะผะฐ"
    uuid
      PRIMARY KEY
, "ะ”ะฐั‚ะฐ"
    date
);

ืชื—ืกื•ืš ืฉืงืœ ื™ืคื”

ื•ื‘ื›ืŸ, ืžื” ืื ืื ื—ื ื• ืœื ืžืฉืชืžืฉื™ื ืืคืฉืจื•ืช ื—ื™ืชื•ืš ืงืœืืกื™ืช ื‘ื”ืชื‘ืกืก ืขืœ ื”ืคืฆื” ืฉืœ ืขืจื›ื™ ืฉื“ื•ืช (ื“ืจืš ื˜ืจื™ื’ืจื™ื ื•ื”ื•ืจืฉื” ืื• PARTITION BY), ื•"ื™ื“ื ื™ืช" ื‘ืจืžืช ื”ืืคืœื™ืงืฆื™ื”, ืชื‘ื—ื™ืŸ ืฉื”ืขืจืš ืฉืœ ืžืคืชื— ื”ืžื—ื™ืฆื•ืช ื›ื‘ืจ ืžืื•ื—ืกืŸ ื‘ืฉื ื”ื˜ื‘ืœื” ืขืฆืžื”.

ืื– ืื ืืชื” ื›ื–ื” ื”ืื ืืชื” ืžื•ื“ืื’ ืžืื•ื“ ืžื›ืžื•ืช ื”ื ืชื•ื ื™ื ื”ืžืื•ื—ืกื ื™ื?, ืื– ืชื•ื›ืœ ืœื”ื™ืคื˜ืจ ืžื”ืฉื“ื•ืช ื”"ื ื•ืกืคื™ื" ื”ืœืœื• ื•ืœื”ืชื™ื™ื—ืก ืœื˜ื‘ืœืื•ืช ืกืคืฆื™ืคื™ื•ืช. ื ื›ื•ืŸ, ื›ืœ ื”ื‘ื—ื™ืจื•ืช ืžืžืกืคืจ ืกืขื™ืคื™ื ื‘ืžืงืจื” ื–ื” ื™ืฆื˜ืจื›ื• ืœืขื‘ื•ืจ ืœืฆื“ ื”ืืคืœื™ืงืฆื™ื”.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”