Awọn abajade wiwa ati awọn ọran iṣẹ

Ọkan ninu awọn oju iṣẹlẹ aṣoju ni gbogbo awọn ohun elo ti a faramọ ni wiwa data ni ibamu si awọn ibeere kan ati fifihan ni ọna kika rọrun-si-ka. Awọn aṣayan afikun le tun wa fun tito lẹsẹsẹ, akojọpọ, ati paging. Iṣẹ-ṣiṣe naa jẹ, ni imọran, ko ṣe pataki, ṣugbọn nigbati o ba yanju rẹ, ọpọlọpọ awọn olupilẹṣẹ ṣe nọmba awọn aṣiṣe, eyiti o fa nigbamii ti iṣelọpọ lati jiya. Jẹ ká gbiyanju lati ro orisirisi awọn aṣayan fun a yanju isoro yi ki o si gbekale awọn iṣeduro fun yiyan awọn julọ munadoko imuse.

Awọn abajade wiwa ati awọn ọran iṣẹ

Aṣayan oju-iwe #1

Aṣayan ti o rọrun julọ ti o wa si ọkan jẹ ifihan oju-iwe nipasẹ oju-iwe ti awọn abajade wiwa ni fọọmu aṣaju julọ rẹ.

Awọn abajade wiwa ati awọn ọran iṣẹ
Jẹ ki a sọ pe ohun elo rẹ nlo aaye data ibatan kan. Ni ọran yii, lati ṣafihan alaye ni fọọmu yii, iwọ yoo nilo lati ṣiṣẹ awọn ibeere SQL meji:

  • Gba awọn ori ila fun oju-iwe lọwọlọwọ.
  • Ṣe iṣiro nọmba lapapọ ti awọn ila ti o baamu si awọn ibeere wiwa - eyi jẹ pataki lati ṣafihan awọn oju-iwe.

Jẹ ki a wo ibeere akọkọ nipa lilo idanwo data MS SQL gẹgẹbi apẹẹrẹ AdventureWorks fun 2016 olupin. Fun idi eyi a yoo lo Sales.SalesOrderHeader tabili:

SELECT * FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY

Ibeere ti o wa loke yoo da awọn aṣẹ 50 akọkọ pada lati atokọ, lẹsẹsẹ nipasẹ ọjọ ti o sọkalẹ, ni awọn ọrọ miiran, awọn aṣẹ 50 to ṣẹṣẹ julọ.

O nṣiṣẹ ni kiakia lori ipilẹ idanwo, ṣugbọn jẹ ki a wo ero ipaniyan ati awọn iṣiro I/O:

Awọn abajade wiwa ati awọn ọran iṣẹ

Table 'SalesOrderHeader'. Scan count 1, logical reads 698, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

O le gba awọn iṣiro I/O fun ibeere kọọkan nipa ṣiṣe SET STATISTICS IO ON pipaṣẹ ni akoko asiko ibeere naa.

Gẹgẹbi o ti le rii lati inu ero ipaniyan, aṣayan ti o lekoko julọ ni lati to gbogbo awọn ori ila ti tabili orisun nipasẹ ọjọ ti a ṣafikun. Ati pe iṣoro naa ni pe awọn ori ila diẹ sii han ninu tabili, “lile” ti yiyan yoo jẹ. Ni iṣe, iru awọn ipo yẹ ki o yago fun, nitorinaa jẹ ki a ṣafikun atọka si ọjọ afikun ki o rii boya agbara awọn orisun ti yipada:

Awọn abajade wiwa ati awọn ọran iṣẹ

Table 'SalesOrderHeader'. Scan count 1, logical reads 165, physical reads 0, read-ahead reads 5, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

O han ni pe o ti ni ilọsiwaju pupọ. Ṣugbọn ṣe gbogbo awọn iṣoro ni a yanju? Jẹ ki a yi ibeere pada lati wa awọn aṣẹ nibiti iye owo ẹru ti kọja $100:

SELECT * FROM Sales.SalesOrderHeader
WHERE SubTotal > 100
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY

Awọn abajade wiwa ati awọn ọran iṣẹ

Table 'SalesOrderHeader'. Scan count 1, logical reads 1081, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

A ni ipo alarinrin: ero ibeere naa ko buru pupọ ju ti iṣaaju lọ, ṣugbọn nọmba gangan ti awọn kika ọgbọn ti fẹrẹẹ lemeji bi o tobi bi pẹlu ọlọjẹ tabili ni kikun. Ọna kan wa - ti a ba ṣe atọka akojọpọ lati inu atọka ti o wa tẹlẹ ti o si ṣafikun idiyele lapapọ ti awọn ẹru bi aaye keji, a yoo tun gba awọn kika ọgbọn ọgbọn 165:

CREATE INDEX IX_SalesOrderHeader_OrderDate_SubTotal on Sales.SalesOrderHeader(OrderDate, SubTotal);

Awọn apẹẹrẹ apẹẹrẹ le tẹsiwaju fun igba pipẹ, ṣugbọn awọn ero akọkọ meji ti Mo fẹ sọ nihin ni:

  • Ṣafikun eyikeyi ami-ami tuntun tabi aṣẹ lẹsẹsẹ si ibeere wiwa le ni ipa pataki lori iyara ibeere wiwa.
  • Ṣugbọn ti a ba nilo lati yọkuro apakan nikan ti data, ati kii ṣe gbogbo awọn abajade ti o baamu awọn ọrọ wiwa, awọn ọna pupọ lo wa lati mu iru ibeere bẹẹ dara.

Bayi jẹ ki a lọ si ibeere keji ti a mẹnuba ni ibẹrẹ akọkọ - eyi ti o ka nọmba awọn igbasilẹ ti o ni itẹlọrun ami-iwadii naa. Jẹ ki a mu apẹẹrẹ kanna - wiwa fun awọn aṣẹ ti o ju $100 lọ:

SELECT COUNT(1) FROM Sales.SalesOrderHeader
WHERE SubTotal > 100

Fi fun atọka akojọpọ akojọpọ ti itọkasi loke, a gba:

Awọn abajade wiwa ati awọn ọran iṣẹ

Table 'SalesOrderHeader'. Scan count 1, logical reads 698, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Otitọ pe ibeere naa lọ nipasẹ gbogbo atọka kii ṣe iyalẹnu, nitori aaye SubTotal ko si ni ipo akọkọ, nitorinaa ibeere naa ko le lo. A yanju iṣoro naa nipa fifi atọka miiran kun lori aaye SubTotal, ati bi abajade o fun ni awọn kika ọgbọn ọgbọn 48 nikan.

O le fun awọn apẹẹrẹ diẹ diẹ sii ti awọn ibeere fun kika awọn iwọn, ṣugbọn pataki naa jẹ kanna: gbigba nkan kan ti data ati kika iye lapapọ jẹ awọn ibeere pataki meji ti o yatọ, ati ọkọọkan nilo awọn iwọn tirẹ fun iṣapeye. Ni gbogbogbo, iwọ kii yoo ni anfani lati wa apapo awọn atọka ti o ṣiṣẹ ni deede daradara fun awọn ibeere mejeeji.

Nitorinaa, ọkan ninu awọn ibeere pataki ti o yẹ ki o ṣe alaye nigba idagbasoke iru ojutu wiwa ni boya o ṣe pataki gaan fun iṣowo kan lati rii nọmba lapapọ ti awọn nkan ti o rii. O igba ṣẹlẹ wipe ko si. Ati lilọ kiri nipasẹ awọn nọmba oju-iwe kan pato, ni ero mi, jẹ ojutu kan pẹlu aaye ti o dín pupọ, nitori ọpọlọpọ awọn oju iṣẹlẹ paging dabi “lọ si oju-iwe atẹle.”

Aṣayan oju-iwe #2

Jẹ ki a ro pe awọn olumulo ko bikita nipa mimọ nọmba lapapọ ti awọn nkan ti a rii. Jẹ ki a gbiyanju lati ṣe irọrun oju-iwe wiwa:

Awọn abajade wiwa ati awọn ọran iṣẹ
Ni otitọ, ohun kan ṣoṣo ti o yipada ni pe ko si ọna lati lọ kiri si awọn nọmba oju-iwe kan pato, ati ni bayi tabili yii ko nilo lati mọ iye melo ni o le wa lati ṣafihan. Ṣugbọn ibeere naa waye - bawo ni tabili ṣe mọ boya data wa fun oju-iwe atẹle (lati le ṣafihan ọna asopọ “Next” ni deede)?

Idahun si jẹ irorun: o le ka lati ibi ipamọ data ọkan igbasilẹ diẹ sii ju ti o nilo fun ifihan, ati wiwa ti igbasilẹ "afikun" yii yoo fihan boya o wa ni atẹle. Ni ọna yii, o nilo lati ṣiṣẹ ibeere kan nikan lati gba oju-iwe data kan, eyiti o mu iṣẹ ṣiṣe pọ si ati jẹ ki o rọrun lati ṣe atilẹyin iru iṣẹ ṣiṣe. Ninu iṣe mi, ọran kan wa nigbati kiko lati ka iye lapapọ ti awọn igbasilẹ ṣe iyara ifijiṣẹ awọn abajade nipasẹ awọn akoko 4-5.

Awọn aṣayan wiwo olumulo pupọ lo wa fun ọna yii: “pada” ati “ṣaaju” awọn aṣẹ, bi ninu apẹẹrẹ loke, bọtini “fifuye diẹ sii”, eyiti o ṣafikun apakan tuntun si awọn abajade ti o han, “yi lọ ailopin”, eyiti o ṣiṣẹ lori ilana ti "fifuye diẹ sii" ", ṣugbọn ifihan agbara lati gba apakan atẹle ni fun olumulo lati yi gbogbo awọn esi ti o han si opin. Ohunkohun ti ojutu wiwo, ipilẹ ti iṣapẹẹrẹ data wa kanna.

Nuances ti paging imuse

Gbogbo awọn apẹẹrẹ ibeere ti a fun loke lo ọna “aiṣedeede + kika”, nigbati ibeere naa funrarẹ pato ninu iru awọn ori ila abajade ati iye awọn ori ila nilo lati da pada. Ni akọkọ, jẹ ki a wo bii o ṣe dara julọ lati ṣeto paramita ti o kọja ninu ọran yii. Ni iṣe, Mo ti wa awọn ọna pupọ:

  • Nọmba ni tẹlentẹle ti oju-iwe ti o beere (Atọka oju-iwe), iwọn oju-iwe (Iwọn oju-iwe).
  • Nọmba ni tẹlentẹle ti igbasilẹ akọkọ lati pada (startIndex), nọmba ti o pọju awọn igbasilẹ ninu abajade (ka).
  • Nọmba ọkọọkan ti igbasilẹ akọkọ lati pada (startIndex), nọmba ọkọọkan ti igbasilẹ ti o kẹhin lati pada (ipinIndex).

Ni wiwo akọkọ o le dabi pe eyi jẹ alakọbẹrẹ ti ko si iyatọ. Ṣugbọn eyi kii ṣe bẹ - aṣayan ti o rọrun julọ ati gbogbo agbaye jẹ keji (StartIndex, kika). Awọn idi pupọ lo wa fun eyi:

  • Fun ọna kika titẹ sii +1 ti a fun loke, aṣayan akọkọ pẹlu Atọka oju-iwe ati Iwọn oju-iwe jẹ airọrun lalailopinpin. Fun apẹẹrẹ, a fẹ lati ṣafihan awọn ifiweranṣẹ 50 fun oju-iwe kan. Gẹgẹbi algorithm ti o wa loke, o nilo lati ka igbasilẹ diẹ sii ju pataki lọ. Ti “+1” yii ko ba ṣe imuse lori olupin naa, o wa ni pe fun oju-iwe akọkọ a gbọdọ beere awọn igbasilẹ lati 1 si 51, fun keji - lati 51 si 101, ati bẹbẹ lọ. Ti o ba pato iwọn oju-iwe kan ti 51 ati alekun Atọka oju-iwe, lẹhinna oju-iwe keji yoo pada lati 52 si 102, ati bẹbẹ lọ. Nitorinaa, ni aṣayan akọkọ, ọna kan ṣoṣo lati ṣe imuse bọtini kan daradara lati lọ si oju-iwe ti o tẹle ni lati jẹ ki olupin naa tun ka laini “afikun”, eyiti yoo jẹ nuance ti ko tọ.
  • Aṣayan kẹta ko ni oye rara, nitori lati ṣiṣe awọn ibeere ni ọpọlọpọ awọn apoti isura infomesonu iwọ yoo tun nilo lati kọja kika dipo atọka ti igbasilẹ to kẹhin. Yiyọkuro Atọka Ibẹrẹ lati Ipari Atọka le jẹ iṣẹ ṣiṣe iṣiro ti o rọrun, ṣugbọn o jẹ ohun ti o ga julọ nibi.

Bayi a yẹ ki o ṣe apejuwe awọn aila-nfani ti imuse paging nipasẹ “aiṣedeede + opoiye”:

  • Gbigbapada oju-iwe kọọkan ti o tẹle yoo jẹ gbowolori diẹ sii ati lọra ju ti iṣaaju lọ, nitori data data yoo tun nilo lati lọ nipasẹ gbogbo awọn igbasilẹ “lati ibẹrẹ” ni ibamu si wiwa ati yiyan awọn ilana, ati lẹhinna da duro ni ajẹkù ti o fẹ.
  • Kii ṣe gbogbo awọn DBMS le ṣe atilẹyin ọna yii.

Awọn ọna miiran wa, ṣugbọn wọn tun jẹ alaipe. Ni igba akọkọ ti awọn ọna wọnyi ni a pe ni “paging keyset” tabi “ọna wiwa” ati pe o jẹ atẹle yii: lẹhin gbigba ipin kan, o le ranti awọn iye aaye ni igbasilẹ ti o kẹhin lori oju-iwe naa, lẹhinna lo wọn lati gba. nigbamii ti ìka. Fun apẹẹrẹ, a ṣe ibeere wọnyi:

SELECT * FROM Sales.SalesOrderHeader
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY

Ati ninu igbasilẹ ti o kẹhin a ni iye ti ọjọ ibere '2014-06-29'. Lẹhinna lati gba oju-iwe atẹle o le gbiyanju lati ṣe eyi:

SELECT * FROM Sales.SalesOrderHeader
WHERE OrderDate < '2014-06-29'
ORDER BY OrderDate DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY

Iṣoro naa ni pe OrderDate jẹ aaye ti kii ṣe alailẹgbẹ ati pe ipo ti o ṣalaye loke ṣee ṣe lati padanu ọpọlọpọ awọn ori ila ti o nilo. Lati ṣafikun aibikita si ibeere yii, o nilo lati ṣafikun aaye alailẹgbẹ si ipo naa (ro pe 75074 jẹ iye ti o kẹhin ti bọtini akọkọ lati apakan akọkọ):

SELECT * FROM Sales.SalesOrderHeader
WHERE (OrderDate = '2014-06-29' AND SalesOrderID < 75074)
   OR (OrderDate < '2014-06-29')
ORDER BY OrderDate DESC, SalesOrderID DESC
OFFSET 0 ROWS
FETCH NEXT 50 ROWS ONLY

Aṣayan yii yoo ṣiṣẹ ni deede, ṣugbọn ni gbogbogbo yoo nira lati mu dara julọ nitori ipo naa ni oniṣẹ ẹrọ OR ninu. Ti iye bọtini akọkọ ba pọ si bi OrderDate ṣe n pọ si, lẹhinna ipo naa le jẹ irọrun nipa fifi àlẹmọ nikan silẹ nipasẹ SalesOrderID. Ṣugbọn ti ko ba si ibaramu ti o muna laarin awọn iye ti bọtini akọkọ ati aaye nipasẹ eyiti a ti ṣeto abajade, OR ko le yago fun ni ọpọlọpọ awọn DBMS. Iyatọ ti Mo mọ ni PostgreSQL, eyiti o ṣe atilẹyin lafiwe tuple ni kikun, ati pe ipo ti o wa loke le jẹ kikọ bi “WHERE (OrderDate, SalesOrderID) <('2014-06-29', 75074)]. Fi fun bọtini akojọpọ pẹlu awọn aaye meji wọnyi, ibeere bii eyi yẹ ki o rọrun.

Ona keji yiyan le ṣee ri, fun apẹẹrẹ, ni ElasticSearch yi lọ API tabi Cosmos DB - nigbati ibeere kan, ni afikun si data, da idamo pataki kan pada pẹlu eyiti o le gba apakan data atẹle. Ti idanimọ yii ba ni igbesi aye ailopin (bii Comsos DB), lẹhinna eyi jẹ ọna nla lati ṣe imuse paging pẹlu iyipada lẹsẹsẹ laarin awọn oju-iwe (aṣayan #2 ti a mẹnuba loke). Awọn alailanfani ti o ṣeeṣe: ko ṣe atilẹyin ni gbogbo awọn DBMS; Abajade idanimọ chunk atẹle le ni igbesi aye to lopin, eyiti ko dara fun imuse ibaraenisepo olumulo (bii ElasticSearch lilọ API).

Asẹpọ eka

Jẹ ki ká complicate awọn iṣẹ-ṣiṣe siwaju sii. Ṣebi pe ibeere kan wa lati ṣe ohun ti a pe ni wiwa faceted, eyiti o faramọ gbogbo eniyan lati awọn ile itaja ori ayelujara. Awọn apẹẹrẹ ti o wa loke ti o da lori tabili awọn aṣẹ kii ṣe apejuwe pupọ ninu ọran yii, nitorinaa jẹ ki a yipada si tabili Ọja lati ibi ipamọ data AdventureWorks:

Awọn abajade wiwa ati awọn ọran iṣẹ
Kini imọran lẹhin wiwa faceted? Otitọ ni pe fun eroja àlẹmọ kọọkan nọmba awọn igbasilẹ ti o pade ami-ẹri yii han ni akiyesi awọn asẹ ti a yan ni gbogbo awọn ẹka miiran.

Fun apẹẹrẹ, ti a ba yan ẹka Awọn keke ati awọ Dudu ni apẹẹrẹ yii, tabili yoo ṣafihan awọn keke dudu nikan, ṣugbọn:

  • Fun ami-ami kọọkan ninu ẹgbẹ Awọn ẹka, nọmba awọn ọja lati ẹya yẹn yoo han ni dudu.
  • Fun iyasọtọ kọọkan ti ẹgbẹ "Awọn awọ", nọmba awọn kẹkẹ ti awọ yii yoo han.

Eyi ni apẹẹrẹ ti abajade abajade fun iru awọn ipo:

Awọn abajade wiwa ati awọn ọran iṣẹ
Ti o ba tun ṣayẹwo ẹka "Aṣọ", tabili naa yoo tun ṣe afihan awọn aṣọ dudu ti o wa ni iṣura. Nọmba awọn ọja dudu ti o wa ni apakan "Awọ" yoo tun ṣe atunṣe ni ibamu si awọn ipo titun, nikan ni apakan "Awọn ẹka" ko si ohun ti yoo yipada ... Mo nireti pe awọn apẹẹrẹ wọnyi ti to lati ni oye aṣawari wiwa algorithm ti aṣa.

Bayi jẹ ki a fojuinu bawo ni eyi ṣe le ṣe imuse lori ipilẹ ibatan. Ẹgbẹ kọọkan ti awọn ibeere, gẹgẹbi Ẹka ati Awọ, yoo nilo ibeere lọtọ:

SELECT pc.ProductCategoryID, pc.Name, COUNT(1) FROM Production.Product p
  INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
  INNER JOIN Production.ProductCategory pc ON ps.ProductCategoryID = pc.ProductCategoryID
WHERE p.Color = 'Black'
GROUP BY pc.ProductCategoryID, pc.Name
ORDER BY COUNT(1) DESC

Awọn abajade wiwa ati awọn ọran iṣẹ

SELECT Color, COUNT(1) FROM Production.Product p
  INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
WHERE ps.ProductCategoryID = 1 --Bikes
GROUP BY Color
ORDER BY COUNT(1) DESC

Awọn abajade wiwa ati awọn ọran iṣẹ
Kini aṣiṣe pẹlu ojutu yii? O rọrun pupọ - ko ṣe iwọn daradara. Abala àlẹmọ kọọkan nilo ibeere lọtọ lati ṣe iṣiro awọn iwọn, ati pe awọn ibeere wọnyi kii ṣe irọrun julọ. Ni awọn ile itaja ori ayelujara, diẹ ninu awọn ẹka le ni ọpọlọpọ awọn apakan àlẹmọ mejila, eyiti o le jẹ ọran iṣẹ ṣiṣe to ṣe pataki.

Nigbagbogbo lẹhin awọn alaye wọnyi Mo funni ni diẹ ninu awọn ojutu, eyun:

  • Darapọ gbogbo awọn iṣiro opoiye sinu ibeere kan. Ni imọ-ẹrọ eyi ṣee ṣe ni lilo koko-ọrọ UNION, ṣugbọn kii yoo ṣe iranlọwọ iṣẹ ṣiṣe pupọ - data data yoo tun ni lati ṣiṣẹ ọkọọkan awọn ajẹkù lati ibere.
  • Awọn iwọn kaṣe. Eyi ni imọran fun mi ni gbogbo igba ti Mo ṣe apejuwe iṣoro kan. Ikilọ ni pe eyi ko ṣee ṣe ni gbogbogbo. Jẹ ká sọ pé a ni 10 "facets", kọọkan ti eyi ti o ni 5 iye. Eyi jẹ ipo “iwọnwọn” pupọ ni akawe si ohun ti a le rii ni awọn ile itaja ori ayelujara kanna. Yiyan ti ẹya facet kan ni ipa lori awọn iwọn ni awọn miiran 9, ni awọn ọrọ miiran, fun akojọpọ awọn ibeere kọọkan awọn iwọn le yatọ. Ninu apẹẹrẹ wa, apapọ awọn ilana 50 wa ti olumulo le yan; nitorinaa, awọn akojọpọ ṣee ṣe yoo wa 250. Ko si iranti to tabi akoko lati kun iru titobi data. Nibi o le tako ati sọ pe kii ṣe gbogbo awọn akojọpọ jẹ gidi ati pe olumulo ṣọwọn yan diẹ sii ju awọn ibeere 5-10. Bẹẹni, o ṣee ṣe lati ṣe ikojọpọ ọlẹ ati kaṣe iye ti nikan ohun ti a ti yan tẹlẹ, ṣugbọn awọn yiyan diẹ sii wa, ti o dinku daradara iru kaṣe kan yoo jẹ akiyesi diẹ sii ati akiyesi diẹ sii awọn iṣoro akoko idahun yoo jẹ (paapaa ti o ba jẹ data ṣeto ayipada nigbagbogbo).

O da, iru iṣoro bẹ ti pẹ ni awọn solusan ti o munadoko ti o ṣiṣẹ ni asọtẹlẹ lori awọn iwọn nla ti data. Fun eyikeyi ninu awọn aṣayan wọnyi, o jẹ oye lati pin isọdọtun ti awọn oju-iwe ati gbigba oju-iwe abajade si awọn ipe ti o jọra meji si olupin naa ki o ṣeto wiwo olumulo ni ọna ti ikojọpọ data nipasẹ awọn oju “ko dabaru” pẹlu ifihan ti èsì àwárí.

  • Pe iṣiro pipe ti “awọn oju-iwe” ni ṣọwọn bi o ti ṣee. Fun apẹẹrẹ, maṣe ṣe atunto ohun gbogbo ni gbogbo igba ti awọn ibeere wiwa ba yipada, ṣugbọn dipo wa nọmba lapapọ ti awọn abajade ti o baamu awọn ipo lọwọlọwọ ki o tọ olumulo lati ṣafihan wọn - “awọn igbasilẹ 1425 ti a rii, ṣafihan?” Olumulo le tẹsiwaju yiyipada awọn ofin wiwa tabi tẹ bọtini “fihan”. Nikan ninu ọran keji yoo ṣe gbogbo awọn ibeere fun gbigba awọn abajade ati awọn iwọn atunto lori gbogbo “awọn oju-iwe” yoo ṣee ṣe. Ni ọran yii, bi o ṣe le rii ni irọrun, iwọ yoo ni lati koju ibeere kan lati gba nọmba lapapọ ti awọn abajade ati iṣapeye rẹ. Ọna yii le rii ni ọpọlọpọ awọn ile itaja ori ayelujara kekere. O han ni, eyi kii ṣe panacea fun iṣoro yii, ṣugbọn ni awọn igba ti o rọrun o le jẹ adehun ti o dara.
  • Lo awọn ẹrọ wiwa lati wa awọn abajade ati ka awọn oju-iwe, gẹgẹbi Solr, ElasticSearch, Sphinx ati awọn miiran. Gbogbo wọn jẹ apẹrẹ lati kọ “awọn oju-ọna” ati ṣe eyi daradara ni pipe nitori atọka inverted. Bii awọn ẹrọ wiwa ṣe n ṣiṣẹ, kilode ninu iru awọn ọran wọn munadoko diẹ sii ju awọn apoti isura data gbogbogbo-idi, kini awọn iṣe ati awọn ipalara ti o wa - eyi jẹ koko-ọrọ fun nkan lọtọ. Nibi Emi yoo fẹ lati fa ifojusi rẹ si otitọ pe ẹrọ wiwa ko le jẹ aropo fun ibi ipamọ data akọkọ; a lo bi afikun: eyikeyi awọn ayipada ninu ibi ipamọ data akọkọ ti o ṣe pataki fun wiwa ni a muuṣiṣẹpọ sinu atọka wiwa; Ẹrọ wiwa maa n ṣe ajọṣepọ pẹlu ẹrọ wiwa nikan ko si wọle si aaye data akọkọ. Ọkan ninu awọn aaye pataki julọ nibi ni bii o ṣe le ṣeto amuṣiṣẹpọ yii ni igbẹkẹle. Gbogbo rẹ da lori awọn ibeere “akoko idahun”. Ti akoko laarin iyipada ninu aaye data akọkọ ati “ifihan” ninu wiwa ko ṣe pataki, o le ṣẹda iṣẹ kan ti o wa awọn igbasilẹ ti o yipada laipẹ ni gbogbo iṣẹju diẹ ati ṣe atọka wọn. Ti o ba fẹ akoko idahun ti o kuru ju, o le ṣe ohunkan bii Apoti iṣowo lati fi awọn imudojuiwọn ranṣẹ si iṣẹ wiwa.

awari

  1. Ṣiṣe paging ẹgbẹ olupin jẹ ilolu pataki ati pe o ni oye nikan fun idagbasoke ni iyara tabi awọn ipilẹ data nla ni irọrun. Ko si ohunelo pipe fun bi o ṣe le ṣe iṣiro “nla” tabi “dagba ni iyara”, ṣugbọn Emi yoo tẹle ọna yii:
    • Ti gbigba gbigba data pipe, ni akiyesi akoko olupin ati gbigbe nẹtiwọọki, ni ibamu pẹlu awọn ibeere iṣẹ deede, ko si aaye ni imuse paging ni ẹgbẹ olupin naa.
    • Ipo kan le wa nibiti ko si awọn iṣoro iṣẹ ṣiṣe ni ọjọ iwaju nitosi, nitori data kekere wa, ṣugbọn gbigba data n dagba nigbagbogbo. Ti diẹ ninu ṣeto data ni ọjọ iwaju le ko ni itẹlọrun aaye ti tẹlẹ, o dara lati bẹrẹ paging lẹsẹkẹsẹ.
  2. Ti ko ba si ibeere ti o muna ni apakan ti iṣowo lati ṣafihan nọmba lapapọ ti awọn abajade tabi lati ṣafihan awọn nọmba oju-iwe, ati pe eto rẹ ko ni ẹrọ wiwa, o dara lati ma ṣe awọn aaye wọnyi ki o gbero aṣayan #2.
  3. Ti ibeere ti o han gbangba ba wa fun wiwa oju-oju, o ni awọn aṣayan meji laisi iṣẹ ṣiṣe rubọ:
    • Maṣe ṣe atunto gbogbo awọn iwọn ni gbogbo igba ti awọn ibeere wiwa ba yipada.
    • Lo awọn ẹrọ wiwa bii Solr, ElasticSearch, Sphinx ati awọn miiran. Ṣugbọn o yẹ ki o ye wa pe ko le jẹ aropo fun ipilẹ data akọkọ, ati pe o yẹ ki o lo bi afikun si ibi ipamọ akọkọ fun awọn iṣoro wiwa.
  4. Pẹlupẹlu, ninu ọran wiwa oju-iwe, o jẹ oye lati pin igbapada ti oju-iwe awọn abajade wiwa ati kika si awọn ibeere ti o jọra meji. Awọn iwọn kika le gba to gun ju gbigba awọn abajade, lakoko ti awọn abajade ṣe pataki si olumulo.
  5. Ti o ba nlo aaye data SQL kan fun wiwa, eyikeyi iyipada koodu ti o ni ibatan si apakan yii yẹ ki o ni idanwo daradara fun iṣẹ ṣiṣe lori iye data ti o yẹ (ti o kọja iwọn didun ninu aaye data laaye). O tun ni imọran lati lo ibojuwo ti akoko ipaniyan ibeere lori gbogbo awọn iṣẹlẹ ti aaye data, ati ni pataki lori “ifiweranṣẹ” ọkan. Paapaa ti ohun gbogbo ba dara pẹlu awọn ero ibeere ni ipele idagbasoke, bi iwọn data ti n dagba, ipo naa le yipada ni akiyesi.

orisun: www.habr.com

Fi ọrọìwòye kun