KDB+ database: ab oeconomicis ad Formulam 1

KDB+, societas product KX late notum est in circulis angustis, maxime rapidis, datorum columnaribus destinatis ad temporis seriem recondendis et analyticis calculis innixa. Initio, fuit (et est) valde popularis in industria pecuniaria - omnes summae X collocationis ripas et multae notae sepe pecunia, commutationibus et aliis Institutis utebantur. Nuper KX placuit ut basis emptoris expandatur et nunc solutiones offerat in aliis locis ubi magna est notitiarum copia, tempore vel alio modo constituto - telecomes, bioinformatica, fabricatio, etc. Etiam particeps factus est Aston Martin Red Bullae Racing quadrigis in Formula 10, ubi adiuvant colligendas et processus notitias e sensoriis currus et explorationes venti cuniculi analysi. In hoc articulo, volo tibi dicere quid KDB + lineamenta facere super-faciendi, quare societates in ea multam pecuniam impendere volunt, et denique, cur non sit re vera database.
 
KDB+ database: ab oeconomicis ad Formulam 1
 
In hoc articulo conabor vobis in genere dicere quid sit KDB+, quae facultates et limitationes habeat, et quaenam sint ejus beneficia in societatibus quae magna copia notitiarum procedere volunt. Singula exsequenda KDB+ vel in singula linguae programmationis eius non ingrediar, utraque res amplissima et singula capitula digna sunt. Multus informationes de his locis in codice.kx.com inveniri possunt, excepto libro de Q - Q Pro Mortalibus (vide vinculum infra).

Quidam verba

  • In- datorum memoria. A database quod notitias in RAM reponit ad accessum citius. Talis datorum commoda manifesta sunt, incommoda autem sunt possibilis notitiae amissionis et necessitatis multum memoriae in calculonis servi.
  • Columpnali database. Datorum datorum, ubi data columna per columnam magis quam per recordum reponitur. Praecipua utilitas datorum talis est ut notitia ex una columna in disco et in memoria reposita sit, quae signanter ad eam accessum accelerat. Nihil opus est columnas onerare quae in interrogatione non sunt adhibita. Praecipuum incommodum est quod difficile est monumenta mutare ac delere.
  • Temporum series. Data per diem vel tempus columnae. De more tempus ordinatio talis notitiae interest, ut facile possis statuere quaenam tabula praecedit vel sequitur hodiernam, vel functiones adhibere, quarum eventus ex ordine historiarum pendent. Classicorum databases in diversissimo principio structi sunt - repraesentans collectionem monumentorum ut statutum, ubi ordo historiarum est, in principio, non definitus.
  • VECT. In contextu KDB+ haec est elenchus elementorum eiusdem generis atomici, exempli gratia, numeri. Id est, ornatus elementorum. Ordinationes, dissimiles tabulae, arctius condi possunt et processus instructionum vectoris uti.

 

historical notitia

KX condita est anno 1993 ab Arthuro Whitney, qui antea Morgan Stanley Bank in lingua A+ laboravit, successor APL - admodum originali et uno tempore vulgari sermone in mundo oeconomico. Nimirum in KX, Arthurus eodem spiritu permansit et linguam K vector-functionalem creavit, ideis minimalismi radicalis ductus. K programmata quasi turbationem interpunctionis et speciales notas spectant, significatio signorum et munerum ex contextu pendet, et unaquaeque operatio multo plus significat quam in programmandis linguis conventionalibus. Ob hoc programma K minimum spatium occupat - paucae lineae paginas textus verboso sermone sicut Java - reponere possunt et est algorithmus eximius exsecutio.
 
Functio in K ut instrumentum potissimum LL1 generantis secundum datam grammaticam;

1. pp:{q:{(x;p3(),y)};r:$[-11=@x;$x;11=@x;q[`N;$*x];10=abs@@x;q[`N;x]  
2.   ($)~*x;(`P;p3 x 1);(1=#x)&11=@*x;pp[{(1#x;$[2=#x;;,:]1_x)}@*x]  
3.      (?)~*x;(`Q;pp[x 1]);(*)~*x;(`M;pp[x 1]);(+)~*x;(`MP;pp[x 1]);(!)~*x;(`Y;p3 x 1)  
4.      (2=#x)&(@x 1)in 100 101 107 7 -7h;($[(@x 1)in 100 101 107h;`Ff;`Fi];p3 x 1;pp[*x])  
5.      (|)~*x;`S,(pp'1_x);2=#x;`C,{@[@[x;-1+#x;{x,")"}];0;"(",]}({$[".s.C"~4#x;6_-2_x;x]}'pp'x);'`pp];  
6.   $[@r;r;($[1<#r;".s.";""],$*r),$[1<#r;"[",(";"/:1_r),"]";""]]}  

 Arthurus hanc philosophiam extremae efficientiae involvit cum minimis motibus corporis in KDB+, qui anno 2003 apparuit (iam puto constare ubi littera K in nomine e venit) et nihil aliud est quam interpres quartae versionis K. Lingua plus usoris amicae versionis addita est supra K K, quae appellatur Q. Q. Subsidia etiam pro certae dialecto SQL-QSQL, et interpres - subsidium tabularum ut genus systematis, instrumenta pro tabulis operandis. in memoria et in orbe, etc.
 
Itaque e perspectiva utentis, KDB+ est simpliciter lingua Q interpres cum subsidiis tabulis et SQL-similis LINQ-styli locutionum e C#. Haec est maxima differentia inter KDB+ et alias databases et eius praecipua utilitas competitive, quae saepe praetermittitur. Haec lingua auxiliaris database + debilis non est, sed prompta lingua programmandi valida + aedificata in auxilio datorum functionum. Distinctio haec munus decisivum habebit in enumeratione omnium bonorum KDB+. Exempli gratia…
 

magnitudine

A modernis signis, KDB+ est simpliciter minimum magnitudine. Litteralis una fasciculus sub-megabyte exsecutabilis et unus fasciculus textus parvae cum functionibus quibusdam systematis. Reapse - minus quam unum megabytum, et pro hoc programmate societates solvunt per annum pro uno processu in calculo decem milia dollariorum.

  • Magnitudo haec KDB+ permittit ut magnum in omnibus ferramentis sentiat - ex PI microcomputer ad ministrantibus cum terabytis memoriae. Quae quidem functionem nullo modo afficit, praeterea Q statim incipit, quae inter alia uti permittit, ut lingua scriptrix.
  • Ad hanc magnitudinem, Q interpres in cella processus plane convenit, qui exsecutionem programmatis accelerat.
  • Cum hac magnitudine fasciculi exsecutabilis, Q processus spatium exiguum in memoria occupat, centenaria currere potes. Praeterea, si opus est, Q potest operari cum decem vel centenis gigabytis memoriae intra unum processum.

mobilitate

Q magnus pro amplis applicationibus. Processus Q agere potest ut database historica et promptum accessum ad terabytes informationum praebeat. Exempli gratia, justos databases historicorum habemus, in quibus quibusdam unus dies notitiarum incompressus plus quam 100 gigabytes suscipit. Tamen, sub rationabili restrictiones, quaesitum de datorum perficietur in decenis ad centum millium secundorum. In genere, tempus habemus universale pro postulationibus utentis - 30 secundis - et rarissime operatur.
 
Q aeque facile in- datorum memoria esse potuit. Novae notitiae in tabulis memoriis tam cito adduntur ut petitiones usorum circumscriptae sint. Data in tabulis in columnis reponuntur, id quod aliqua operatio in columna utetur processus cache capacitate plena. Praeter hoc, KX omnes operationes fundamentales efficere conati sunt ut arithmetica per instructiones vectoris processus, maxima celeritate sua. Q possunt etiam munera praestare quae non sunt propria pro databases, exempli gratia, processus notitias fluentes et calculare in "tempus reali" (cum mora a decem milliseconds ad plura secunda secundum munus) variae aggregationis functiones pro instrumentis nummariis pro diversis temporibus. intervalla vel edificandi exemplar impressionis perfectarum transactionum ad mercatum et proficuum suum perficiendum fere statim post eius complementum. In his operibus, saepe mora principalis temporis non est Q, sed necesse est ut ex diversis auctoritatibus constet. Maximum celeritatem consequitur ex eo quod notitiae et functiones quae in uno processu sunt, et processus reductus est ad plures QSQL expressiones et nexus, quae non interpretantur, sed in codice binarii efficiuntur.
 
Denique processus officii aliquem scribere potes in Q. Exempli gratia, processuum porta, quae automatice petitiones usorum distribuit necessariis databases et servientibus. Programmator plenam libertatem habet ut algorithmum efficiat ad aequationem, prioritizationem, culpae tolerantiam, accessum iurium, adimpletionem et basically quidquid aliud cordis desiderat. Praecipua quaestio hic est, quod haec omnia efficere debebis.
 
Exemplum, quales processus habemus, enumerabo. Earum omnes active utuntur et simul cooperantur, justos diversorum databases in unum componentes, notitias processus ex multiplicibus fontibus et centum utentium applicationibus ministrantes.

  • Connectores (pastor) ad fontes data. Hi processus typice utuntur bibliothecas externas, quae in Q. The C interface in Q onerata sunt, perquam simplex est, ac permittit te facile procuratorem functiones pro quavis bibliotheca C/C++ creare. Q satis celeriter est ad tractandum, exempli gratia, inundationem FIX nuntiis ab omni Europae stirpe commutationibus eodem tempore dispensando.
  • Data distributores (tickerplant) quae quasi coniunctio media inter connexiones et consumerent. Eodem tempore notitias ineuntes ad singularem stipem binariam scribunt, fortitudinem consumerent contra damna connexionis vel restarts.
  • Memoriae In- datorum (rdb). Haec database quam celerrime accessum praebent ad rudis, recentes notitias in memoria reponendas. De more, notitias in tabulis interdiu accumulant et in nocte eas reset.
  • Persiste database (pdb). Haec database ut notitia pro hodierno in database condatur historica. Pro regula, dissimilis rdb, notitias memoriae non reponunt, sed speciali cella in orbe interdiu utuntur et notitias mediae noctis ad datorum historicorum copiam effingunt.
  • Historical databases (hdb). Haec database accessum praebent ad notitias superioribus diebus, mensibus et annis. Magnitudo eorum (in diebus) nonnisi a magnitudine duritiei limitatur. Data alicubi locari possunt, praesertim in diversis orbis ad accessum accelerandum. Fieri potest ut notitias comprimendas pluribus algorithmis utentes e seligendis. Structura datorum bene documentorum et simplicium, data columna per columnam in regularibus fasciculis reposita est, ut discurrere queant, comprehendo per systema operantem.
  • Databases cum notitia aggregata. Varias collectiones reponunt, plerumque cum instrumento, nomine et temporis intervallo. In memoria databases suum statum renovant cum singulis nuntiis advenientis, et databases historicas prae computatis notitias reponunt ad accessum ad notitias historicas accelerandas.
  • postremo, porta processusapplicationes et usus utentes. Q permittit ut processus asynchronos omnino efficiendi nuntii ineuntes, per databases distribuendo, iura inhibita accessum, etc. Nota epistulas non limitatas esse et frequentius locutiones SQL non esse, sicut in aliis databases. Saepissime expressio SQL in speciali functione occultatur et construitur in parametris petitis ab utente - tempore convertitur, percolatur, notitia normalizata est (exempli gratia, pretium stirpis aequatur si dividendae solvendae sunt) etc.

Architectura typica data unius generis:

KDB+ database: ab oeconomicis ad Formulam 1

celeritas

Etsi Q lingua est interpretata, vector etiam lingua est. Hoc significat quod multi constructi-in functionibus, praesertim arithmeticis, argumenta cuiuslibet formae, numeri, vectoris, matrices, tabulae sumunt β€” et programmator expectatur ad propositum perficiendum sicut operationes ordinatae. In tali sermone, si duos vectores decies elementorum addas, iam non refert quod lingua interpretata sit, additio munus binarii super-optimizatum peragetur. Cum leo temporis in Q programmatis operationibus impenditur cum tabulis quae his functionibus vectorized fundamentalibus utuntur, ratio est honestissima celeritatis operativae, permittens nos ingentem copiam notitiarum etiam in uno processu procedere. Hoc simile est bibliothecis mathematicis in Pythone - quamvis ipsa Python lingua tardissima sit, multas habet bibliothecas excellentissimas quasi numpy quae te permittit ut notitias numerales ad celeritatem linguae compositae procedere (obiter numpy est ad Q. ).
 
Praeterea KX diligentissime accessus ad tabulas excogitandas et cum illis opus optimizing suscepit. Uno modo, varia genera indices sustentantur, quae in functionibus constructis sustentantur et non solum ad columnas tabulas applicari possunt, sed etiam cuilibet vectori - adjunctio, sorting, unicitatis attributi et speciali aggregatio pro databases historicis. Index simpliciter applicatur et automatice elementa ad columnam/vector addit componitur. Indices aeque feliciter ad tabulas columnas tam in memoria quam in orbe applicari possunt. Cum interrogationem QSQL exequens, indices automatice, si fieri potest, adhibentur. Secundo, opus cum notitia historica fit per mechanismum ad OS imaginum proponendum (mappa memoriae). Magnae tabulae numquam in memoriam onustae sunt, sed necessariae columnae directe in memoriam deformatae sunt et sola illarum pars etiam onerata est (indices etiam hic adiuvant) quae opus sunt. Ad programmatorem nihil interest utrum notitia sit in memoria necne, machina ad operandum cum mmap in profundo Q penitus absconditum.
 
KDB+ datorum relationis non est, tabulae datas arbitrarias continere possunt, ordo autem versuum in tabula non mutat, cum nova elementa adduntur et adhiberi possunt et debent cum queries scribentes. Haec factura enixe necessaria est ad temporis seriem operandam (ex commercio, telemetria, eventu acta), quia si notitia temporis est digesta, usor non indiget ut quibuslibet SQL strophis ut in primo vel ultimo ordine vel N inveniatur. ordines in tabula , uter versus Xth lineam sequitur , etc. Tabulae conjunctiones simpliciores adhuc adhuc sunt, exempli gratia, ultimum pretium pro 16000 VOD.L (Vodafone) transactionum in tabula 500 milionum elementorum accipit circiter alterum in disco et decem millium secundorum in memoria.
 
Exemplum temporis iungendi - quotus tabula memoriae proscripta est, ideo non opus est VOD.L definire, ubi, index in columna sym, et quod notitia temporis implicatur, implicatur. Fere omnia in Q iunguntur functiones regulares, non pars expressae;

1. aj[`sym`time;select from trade where date=2019.03.26, sym=`VOD.L;select from quote where date=2019.03.26]  

Denique notandum est quod fabrum apud KX, ab ipso Arthuro Whitney incipiens, vere obsessi sunt efficacia et ad magnas longitudinum rationes ut maxime e notis Q et optimize communissimarum exemplarium usus efficiant.
 

exitum

KDB + popularis est in negotiis praesertim ob eximiam eius versatilitate - aeque ac datorum in- memoriam, sicut datorum terabytarum rerum notitiarum historicarum, et quasi suggestum pro analysi. Ob id quod notitia processus directe in datorum occurs, summa celeritas laboris et subsidiorum compendiorum obtinetur. Linguam programmandi plenam diffugienti cum datorum functionibus integram permittit ut totam acervum processuum necessariorum in uno suggestu efficias - a recipiendo notitias ad usorum exigendas processus.
 

Pro magis notitia,

defectuum oeconomicorum

Incommodum notabile KDB+/Q est limen altus. Lingua syntaxin alienam habet, quaedam functiones onere cumulatur (valorem, exempli gratia, casus 11 circa usum habet). Maxime, requirit prorsus diversum accessum ad programmata scribenda. In lingua vectoris, semper cogitare debes in terminis transmutationibus ordinatis, omnes ansas efficiendi per varias functiones tabularum/reducendas (quae adverbia in Q appellantur), et numquam pecuniam servare conantur ut vector operationes cum atomicis reponat. Exempli gratia, indicem Nth occurrentiae elementi in apparatu invenire, scribere debes:

1. (where element=vector)[N]  

quamquam hoc terribiliter inefficax videtur per signa C/Java (= vector boolean creat, ubi veros indices elementorum in ea refert). Sed haec notatio sensum locutionis clariorem reddit et uteris operationibus velocibus vector pro tardis atomicis. Differentia rationis inter linguam vectorem et alios comparabilis est differentiae inter accessiones imperativi et functionis ad programmandi et ad hoc praeparari debes.
 
Nonnulli etiam ignobiles QSQL sunt. Punctum est quod SQL verum solum spectat. Re quidem vera interpres est SQL-similium locutionum quae optimizationem interrogationis non sustinet. Usor debet scribere quaestiones optimas ipse, et in Q, quod multae non paratae sunt. Ex altera parte, sane, semper te meliorem interrogationem scribere potes, quam optimizer in capsula nigra confisus.
 
Sicut plus, liber in Q - Q Pro mortalibus gratis praesto est societas websiteest etiam multa alia materia utilia ibi congesta.
 
Magnum aliud incommodum est licentiae sumptus. Hoc per annum decem milia dollariorum per CPU sunt. Tantum magnae societates tales expensas praestare possunt. Nuper KX licentiae consilium suum flexibiliorem fecit et facultatem praebet solvendi modo usui vel redditu KDB+ in Google et nubibus Amazonibus. KX etiam offert pro download liberum versionem pro non-commercial proposita (32 bis versio vel 64 bis petita).
 

competitors

Sunt admodum paucae speciales databases in similibus principiis - columnaris, in memoria, in amplissimis datarum ponderibus feruntur. Difficultas est has speciales databases. Magnum exemplum est Clickhouse. Hoc datorum simillimum principium habet KDB+ ad condendum notitias in disco et in indice aedificando, nonnulla queries velocius quam KDB+ facit, etsi non signanter. Sed etiam ut database, Clickhouse specialior est quam KDB+ - telae analyticae nobis seriei temporis arbitrariae (haec differentia magni momenti est - ob eam, exempli gratia, in Clickhouse non possibilis est ordinatio monumentorum uti). Sed, praesertim, Clickhouse non habet mobilitatem KDB+, linguam quae in datorum datorum processus permitteret, potius quam eam prius in applicationem separatam onerare, elocutionibus arbitrariis SQL, applicandis functionibus arbitrariis in interrogatione, processibus faciendis. ad exsecutionem datorum historicarum functionum non pertinentium. Ideo difficile est KDB+ cum aliis databases comparare, ut meliores sint in quibusdam casibus uti vel simpliciter melius cum ad munus datorum classicorum perveniat, sed nescio aliud instrumentum aeque efficax et versatile ad data temporanea dispensanda.
 

Python integration

Ut KDB+ facilius utatur hominibus technicis insuetis, bibliothecas KX creavit, ut cum Pythone in unum processum arcte constringatur. Potes vel vocare munus aliquod Pythonis ex Q, vel vice versa - vocare munus quodvis Q a Pythone (in specie, QSQL expressions). Librarii convertunt, si opus est (non semper efficientiae causa), notitias a forma unius linguae ad formam alterius. Quam ob rem, Q et Python in tam arcta symbiosi vivunt, ut limites inter eos turbentur. Quam ob rem, programmator, ab altera parte, plenus accessus est ad numerosas bibliothecas Pythonis utiles, altera vero, basim festinanter accipit ad operandum magnis notitiis in Pythone insertis, quod maxime utile est iis qui in machinarum eruditione sunt implicati. vel Polyclitum.
 
Q in Pythone opus:

1. >>> q()  
2.q)trade:([]date:();sym:();qty:())  
3. q)  
4. >>> q.insert('trade', (date(2006,10,6), 'IBM', 200))  
5. k(',0')  
6. >>> q.insert('trade', (date(2006,10,6), 'MSFT', 100))  
7. k(',1')  

References

Situs societatis - https://kx.com/
Website for developers - https://code.kx.com/v2/
Book Q De Mortalibus. https://code.kx.com/q4m3/
Articuli in KDB+/Q adhibitis ex kx conductis - https://code.kx.com/v2/wp/

Source: www.habr.com