GitHub - openacidslim În mod surprinzător, trie eficient din punct de vedere spațial în Golang (11 bitskey; 100 nsget)
Slim - în mod surprinzător, tipuri de date eficiente în spațiu în Golang

Slim este o colecție de tipuri de date surprinzător de eficiente din punct de vedere spațial, cu API-uri de serializare corespunzătoare pentru a le păstra pe disc sau pentru transport.
Pe măsură ce datele de pe internet continuă să crească exponențial, decalajul de capacitate dintre memorie și disc devine mai mare.
De cele mai multe ori, datele în sine nu trebuie încărcate în memoria principală scumpă. Doar informațiile mult mai importante, WHERE-A-DATA-IS, merită un loc în memoria principală.
Aceasta este ceea ce face Slim, păstrează cât mai puține informații în memoria principală, ca un indice minimizat de cantitate imensă de date externe.
SlimIndex: este o structură de index comună, construită deasupra SlimTrie .
SlimTrie este structura subiacentă a datelor de index, dezvoltată din trie.
Caracteristici:
Minimizat: 11 biți pe cheie(mult mai puțin decât un pointer pe 64 de biți !).
Grajd: consumul de memorie este stabil în diferite scenarii. Cel mai rău caz converge la consumul mediu strâns. A se vedea etalonul.
Chei lungi: Poti avea FOARTE taste lungi (16K octeți), fără risipă de memorie (și bani). Nu vă pierdeți viața scriind o altă compresie de prefix:). (aws-s3 limitează lungimea cheii la 1024 octeți). Consumul de memorie se referă numai la numărul de taste, nu la lungimea cheii.
Ordonat: la fel ca btree, cheile sunt stocate. Scanarea intervalului va fi gata în 0.6.0 .
Rapid:
100 ns pe Get (). Complexitatea timpului pentru un get este O (log (n) + k); n: număr de chei; k: lungimea cheii .
Gata pentru transport: un singur proto.Marshal () este tot ce este necesar pentru a serializa, transporta sau persista pe disc etc.
Design cuplat slab: logica indexului și stocarea datelor sunt complet separate. Bucată de tort folosind SlimTrie pentru a indexa date imense.
Biți/cheie: memorie sau spațiu pe disc în biți o cheie consumată în medie. Nu se schimbă când lungimea cheii (k) devine mai mare!
Timp (în nano secunde) petrecut pe un Get () cu golang-map, SlimTrie, array și btree de google.
- De 3,3 ori mai rapid decât arborele.
- De 2,3 ori mai rapid decât căutarea binară.