Scribens in PostgreSQL sub lucem: 1 hospes, 1 dies, 1TB
Nuper dixi tibi quomodo, utens receptaculis vexillum proventus in observantia SQL legere queries ex PostgreSQL database. Hodie loquemur quomodo fieri potest efficacius memoria in database, sine ullo "torquet" in config - simpliciter, recte ordinando notitia fluit.
Initio, sicut quaelibet MVP, consilium nostrum sub onere satis levi incepit - vigilantia tantum duodecim servientium criticorum peractum est, omnes tabulae inter se compactae erant. ac magis atque iterum uno aliquid conaremur tables 1.5TB in magnitudineintelleximus quod, licet hoc modo vivere posset, valde incommodum erat.
Tempora paene ut epicis temporibus erant, variae versiones PostgreSQL 9.x pertinebant, ita omnes partitiones faciendae erant "manually" - per mensa hæreditatem et triggers profectus est dynamic EXECUTE.
Solutio inde evenit satis universale quod ad omnes tabulas transferri posset.
Mensa inani "capitis" parentis declarata est, quae omnia descripsit index necessaria et triggers.
Commentarius de huius sententia in mensa "radicis" facta est, et interne utens profectus felisBEFORE INSERT recordum "physice" in sectione inquisita inseri. Si nihil tale adhuc, exceptum et prehendimus.
β¦ ab usura CREATE TABLE ... (LIKE ... INCLUDING ...) creatus est in mensa parentis secundum exemplum sectioni cum restrictione in desideravit dateut cum notitia reddat, lectio nonnisi in eo perficitur.
PG10: primo conatus
Sed partitio hereditatis historice non aptior fuit ad tractandum de activa scribentium rivo vel multitudine infantum partitionum. Exempli gratia, memorare potes algorithmum ad sectionem requisitam eligendam habuisse quadratae complexionemquod cum sectionibus 100+ operatur, ipse intelligis quomodo...
In PG10 hoc statu valde optimized est ad sustentationem fovendam patria partitionibus. Ergo statim post migrationem ceptaculum adhibere conati sumus, sed...
Cum euenit fodiendo per manus manuali, mensa partita in hac versione est:
non support index descriptiones
non triggers support in eo
non potest esse alicuius "degener"
non support INSERT ... ON CONFLICT
non potest generare sectionem automatice
Accepto dolore frontis ictum cum rastro, intelleximus id sine applicatione immutato fieri posse, et in sex menses ulteriorem inquisitionem distulisse.
PG10: secundo casu
Ita coepimus singulatim orta problemata solvere;
Quia triggers et ON CONFLICT Invenimus nos adhuc eis hic et ibi indigere, ut medium fecerimus ad operandum eos ineundo mensam.
Abiecisse "fuso" in triggers - id est, ex EXECUTE.
Seorsim tulerunt eam template mensam cum omnibus indicibusut ne adsit quidem in procuratorio tabellae.
Tandem post haec omnia tabulam principalem nativam partitavimus. Creatio novae sectionis adhuc conscientiae applicationis relinquitur.
"Sawing" dictionaries
Sicut in quavis ratione analytica, nos etiam habuimus facta et secet; (dictionaries). In nobis in hac facultate agebant, e.g. template corpus similes interrogationes tardae vel textus ipsius interrogationis.
"Res" in die iam diu secatae sunt, itaque sectiones iam datas placide delevimus, nec nobis molesti sunt. Difficultas cum dictionariis...
Non dico multum esse, sed proxime 100TB de "facta" consecuta in 2.5TB dictionario. Non potes commode aliquid ex tali mensa delere, non potes illud tempore congruo comprimere, et scribendo sensim tardior factus est.
Sicut dictionarium... in eo, singuli introitus exacte semel exhibeantur... et hoc verum est, sed!... Nemo nos prohibet habere separatum dictionarium singulis diebus! Imo hoc affert nugationem quandam, sed admittit;
scribentes injustitiam / legere citius ex minore magnitudine
minus memoriae per opus magis pacto index
copia minus notitia propter facultatem cito removere outdated
Ex toto complexu mensurarum CPU onus minuitur ~ XXX%, orbis onus by ~ L%:
Eodem tempore in datorum modo minus onere prorsus eadem scribere perstrinximus.
#2. Database evolutionis et refactoring
Ita constituimus quod habemus quisque diem suum habet sectionem with data. Profecto, CHECK (dt = '2018-10-12'::date) β et est clavis partitionis ac conditio monumenti in sectionem certam cadere.
Cum omnes relationes in ministerio nostro aedificatae sint in contextu certae aetatis, indices earum, quia tempora non partita omnia genera fuerunt. (Servus, diem, Consilium Template), (Servus, diem, Consilium node), (diem, Error classis, Servo)...
Nunc autem per singulas partes vivunt exemplaribus tuis quisque talis index... Et infra singulas partes date est assidue... Evenit ut nunc sumus in unoquoque indice tantum intrant constant ut unum ex agris, quod et volumen auget et tempus conquirit, sed nullum affert fructum. Relictis rastris ad se geras ...
Directio ipsum patet - simplex removere diem agrum ab omnibus indicibus in tabulis partita. Nostris libris, lucrum est fere 1TB/septimana!
Nunc notemus hunc terabytum adhuc aliquo modo notari oportuisse. Hoc est, et nos orbis nunc onerare minus! Haec pictura clare ostendit effectum ex purgatione, cui per hebdomadam devovimus;
#3. "Spatiando" ad apicem onus
Unus ex magnis molestiis systematibus onustis est superuacua synchronisation aliquas operationes non requirunt. Aliquando "quia non animadvertebant", interdum "facilius erat", sed citius aut postea carere debes.
Let's zoom in on the previous picture and see that we have a disk "Sumps" sub onere cum duplici amplitudine inter exempla proxima, quae evidenter "peraeque" accidere non debent cum tot operationibus;
Id consequatur facilis sit. Nos iam coepi magna prope M serversunumquodque procedit a filo logico separato, et quodlibet stamina cumulata informationes mittendi datorum ad quamdam frequentiam, aliquid simile;
setInterval(sendToDB, interval)
Quaestio hic in eo posita est omnia fila incipiant fere eodem temporeita tempora mittentes ad punctum fere semper coincidunt. Oops #2...
Fortunate, hoc satis facile est figere; addendo "temere" run-sursum tempus:
Quaestio tertia traditional highload non cache ubi est posset esse.
Exempli gratia, nos in terminis nodis consilii analysi fieri possemus (omnia haec Seq Scan on users) sed statim putant eos plerunque eosdem esse oblitos.
Immo, nihil scriptum est iterum datorum, haec intercludit felis INSERT ... ON CONFLICT DO NOTHING. Sed haec notitia adhuc datorum datorum attingit, nec necesse est legere ut reprehendo pro conflictu placeat. Oops #3...
Differentia in numero monumentorum datorum missis ante/postquam caching perspicitur:
Et hoc est gutta comitatus in repositione oneris;
in summa
"Terabyte-per-die" tantum sonat scary. Si omnia recte facis, hoc iustum est 2^40 bytes / 86400 seconds = ~12.5MB/sut etiam escritorio iDe cochleis tenebatur. π
Sed serio, etiam cum decuplo "skw" oneris interdiu, facile poteris occurrere capacitatibus SSDs modernorum.