Bunachar sonraí Messenger (cuid 2): deighilt “le haghaidh brabúis”

D'éirigh linn struchtúr ár mbunachar sonraí PostgreSQL a dhearadh chun comhfhreagras a stóráil, tá bliain caite, tá úsáideoirí ag líonadh go gníomhach é, agus anois tá na milliúin taifead, agus... thosaigh rud éigin ag dul i moilliú.

Bunachar sonraí Messenger (cuid 2): deighilt “le haghaidh brabúis”
Go deimhin, tá go De réir mar a thagann méadú ar mhéid an tábla, is amhlaidh freisin a thagann “doimhneacht” na n-innéacsanna. - cé go logartamach. Ach le himeacht ama cuireann sé seo iallach ar an bhfreastalaí na tascanna céanna léite/scríbhneoireachta a dhéanamh próiseáil i bhfad níos mó leathanach sonraíná ag an tús.

Seo an áit a dtagann sé chun an tarrthála altoireacht.

Lig dom a thabhairt faoi deara nach bhfuil muid ag caint faoi sharding, is é sin, sonraí a dháileadh idir bunachair shonraí nó freastalaithe éagsúla. Mar gheall ar fiú na sonraí a roinnt i roinnt freastalaithe, ní bhfaighidh tú réidh le fadhb na n-innéacsanna “at” le himeacht ama. Tá sé soiléir más féidir leat freastalaí nua a chur i bhfeidhm gach lá, ansin ní bheidh do chuid fadhbanna i bplána bunachar sonraí ar leith a thuilleadh.

Déanfaimid machnamh ar ní scripteanna sonracha chun críochdheighilt “i gcrua-earraí” a chur i bhfeidhm, ach ar an gcur chuige féin - cad é agus conas ba cheart a “ghearradh i slisní”, agus cad a leanann dúil den sórt sin.

Coincheap

Sainmhínímid ár sprioc arís: ba mhaith linn a chinntiú go bhfanann an méid sonraí a léann PostgreSQL le linn aon oibríocht léite/scríofa a bheag nó a mhór mar a chéile inniu, amárach, agus i gceann bliana.

Le haghaidh aon sonraí carntha go croineolaíoch (teachtaireachtaí, doiciméid, logs, cartlanna, ...) is é an rogha nádúrtha mar eochair deighilte dáta/am imeachta. Is é ár gcás, imeacht den sórt sin nóiméad seolta na teachtaireachta.

Tabhair faoi deara go bhfuil úsáideoirí beagnach i gcónaí oibriú leis na cinn “is déanaí” amháin sonraí den sórt sin - léann siad na teachtaireachtaí is déanaí, déanann siad anailís ar na logaí is déanaí, ... Níl, ar ndóigh, is féidir leo scrollú níos faide siar in am, ach is annamh a dhéanann siad é seo.

Ó na srianta seo is léir gurb é an réiteach teachtaireachta is fearr ailt “laethúla”. - tar éis an tsaoil, is beagnach i gcónaí a léifidh ár n-úsáideoir cad a tháinig air "inniu" nó "inné".

Má scríobhann muid agus a léamh beagnach ach i roinn amháin i rith an lae, ansin tugann sé seo dúinn freisin úsáid níos éifeachtaí a bhaint as cuimhne agus diosca - ós rud é go n-oireann na hinnéacsanna rannáin go léir isteach go héasca sa RAM, i gcodarsnacht leis na cinn “mór agus saille” ar fud an tábla.

céim-ar-chéim

Go ginearálta, fuaimeanna gach rud a dúradh thuas cosúil le brabús leanúnach amháin. Agus tá sé indéanta, ach le haghaidh seo beidh orainn iarracht a dhéanamh go crua - mar gheall ar is é an toradh a bhíonn ar chinneadh ceann de na heintitis a dheighilt ná an gá na heintitis ghaolmhara a “fheiceáil”..

Teachtaireacht, a airíonna agus réamh-mheastacháin

Ós rud é gur shocraigh muid teachtaireachtaí a ghearradh de réir dátaí, tá ciall leis na heintitis-airíonna atá ag brath orthu a roinnt freisin (comhaid ceangailte, liosta faighteoirí), agus freisin de réir dáta na teachtaireachta.

Ós rud é gurb é ceann dár ngnáththascanna ná cláir teachtaireachtaí a fheiceáil go beacht (neamhléite, ag teacht isteach, ar fad), tá sé loighciúil freisin “iad a tharraingt isteach” i ndeighilt de réir dátaí teachtaireachta.

Bunachar sonraí Messenger (cuid 2): deighilt “le haghaidh brabúis”

Cuirimid an eochair deighilte (dáta na teachtaireachta) leis na táblaí go léir: faighteoirí, comhaid, clárlanna. Ní gá duit é a chur leis an teachtaireacht féin, ach úsáid a bhaint as an DateTime atá ann cheana féin.

Ábhair

Ós rud é nach bhfuil ach ábhar amháin le haghaidh roinnt teachtaireachtaí, níl aon bhealach ann é a “ghearradh” sa mhúnla céanna; caithfidh tú brath ar rud éigin eile. Is é ár gcás go bhfuil sé idéalach dáta na chéad teachtaireachta sa chomhfhreagras — is é sin, tráth cruthaithe an ábhair, i ndáiríre.

Bunachar sonraí Messenger (cuid 2): deighilt “le haghaidh brabúis”

Cuir an eochair deighilte (dáta ábhair) leis na táblaí go léir: topaic, rannpháirtí.

Ach anois tá dhá fhadhb againn ag an am céanna:

  • Cén rannóg ar cheart dom teachtaireachtaí ar an ábhar a lorg?
  • Cén rannóg ar cheart dom an topaic a lorg ón teachtaireacht?

Is féidir linn, ar ndóigh, leanúint ar aghaidh ag cuardach i ngach rannóg, ach beidh sé seo an-brónach agus ní bheidh ár buaite go léir a dhiúltú. Mar sin, chun go mbeidh a fhios againn cá háit go díreach le breathnú, déanfaimid naisc/treoracha loighciúla le rannóga:

  • cuirfimid isteach an teachtaireacht réimse dáta ábhar
  • cuirimis leis an ábhar dáta teachtaireacht socraithe an comhfhreagras seo (is féidir é a bheith ina tábla ar leith, nó ina raon dátaí)

Bunachar sonraí Messenger (cuid 2): deighilt “le haghaidh brabúis”

Ós rud é nach mbeidh mórán modhnuithe ar an liosta dátaí teachtaireachta do gach comhfhreagras aonair (tar éis an tsaoil, titim beagnach gach teachtaireacht ar laethanta in aice láimhe 1-2), díreoidh mé ar an rogha seo.

San iomlán, bhí struchtúr ár mbunachar sonraí san fhoirm seo a leanas, agus deighilt á cur san áireamh:

Táblaí: RU, má tá casacht agat ar an aibítir Choireallach in ainmneacha táblaí/réimsí, is fearr gan breathnú

-- секции по дате сообщения
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
);

Sábháil pingin deas

Bhuel, cad mura n-úsáidimid rogha clasaiceach roinne bunaithe ar dháileadh na luachanna réimse (trí thriogairí agus oidhreacht nó RANNÁN BY), agus “de láimh” ag leibhéal an fheidhmchláir, tabharfaidh tú faoi deara go bhfuil luach na heochrach deighilte stóráilte cheana féin in ainm an tábla féin.

Mar sin má tá tú amhlaidh An bhfuil an-imní ort faoin méid sonraí atá stóráilte?, ansin is féidir leat fáil réidh leis na réimsí “breise” seo agus aghaidh a thabhairt ar tháblaí sonracha. Fíor, ní mór gach roghnú ó chodanna éagsúla sa chás seo a aistriú go dtí taobh an iarratais.

Foinse: will.com

Add a comment