GitHub - openacidslim Дивовижно космічно ефективна триє в Голангу (11 біткей; 100 nsget)

Тонкий - напрочуд просторові типи даних у Golang

космічно

Slim - це колекція напрочуд просторових типів даних із відповідними API серіалізації для збереження їх на диску або для транспортування.

Оскільки дані в Інтернеті постійно збільшуються в геометричній прогресії, розрив між пам’яттю та диском стає все більшим.

Здебільшого самі дані не потрібно завантажувати в дорогу основну пам’ять. Тільки набагато важливіша інформація WHERE-A-DATA-IS заслуговує на місце в основній пам'яті.

Це те, що робить slim, зберігає якомога менше інформації в основній пам’яті, як мінімізований індекс величезної кількості зовнішніх даних.

SlimIndex: це загальна структура індексу, побудована на вершині SlimTrie .

SlimTrie - це основна структура даних індексу, розроблена з trie.

Особливості:

Зведено до мінімуму: 11 біт на ключ(набагато менше 64-бітового покажчика !).

Стабільний: споживання пам'яті стабільно в різних сценаріях. Найгірший випадок щільно сходиться до середнього споживання. Див. Еталон.

Loooong ключі: Ти можеш мати ДУЖЕ довгі клавіші (16 Кбайт), без витрат пам'яті (та грошей). Не витрачайте своє життя на написання чергового стиску префікса:). (aws-s3 обмежує довжину ключа 1024 байтами). Споживання пам'яті стосується лише кількості ключів, не до довжини ключа.

Впорядковано: як btree, ключі зберігаються. Діапазон-сканування буде готовий через 0.6.0 .

Швидко:

100 нс за Get (). Складність часу для отримання - O (log (n) + k); n: кількість ключів; k: довжина ключа .

Готовий до транспортування: один прото.Marshal () - це все, що потрібно для серіалізації, транспортування або збереження на диску тощо.

Слабко зчеплений дизайн: логіка індексу та зберігання даних повністю розділені. Шматок пирога за допомогою SlimTrie для індексації величезних даних.

Біти/ключ: пам'ять або дисковий простір у бітах ключ, споживаний в середньому. Він не змінюється, коли довжина ключа (k) стає більшою!

Час (у наносекундах), витрачений на Get () за допомогою golang-map, SlimTrie, array та btree від google.

  • В 3,3 рази швидше ніж btree.
  • В 2,3 рази швидше ніж двійковий пошук.

Час (у наносекундах), витрачений на Get () з різною кількістю ключів (n) та довжиною ключа (k):

Помилково позитивний рейтинг

Блум-фільтру потрібно близько 9 біт/ключ, щоб отримати менше 1% FPR.

API SlimTrie стабільні і використовуються у виробничій середовищі.

Тим часом ми зосереджуємося на оптимізації використання пам'яті та продуктивності запитів.

Внутрішня структура даних обіцяна бути назавжди сумісною назавжди. Немає проблем із міграцією даних!

  • Запит за діапазоном
  • 2019-09-18 v0.5.10 Зменшити коефіцієнт помилково позитивних результатів до менш ніж 0,05%
  • 2019-06-03 v0.5.9 Тест великого набору ключів
  • 2019-05-29 v0.5.6 Підтримка до 2 мільярдів ключів
  • 2019-05-18 v0.5.4 Скоротіть використання пам'яті з 40 до 14 біт/ключ
  • 2019-04-20 v0.4.3 Індекс діапазону: багато ключів мають один елемент індексу
  • 2019-04-18 v0.4.1 Підтримка маршалінгу
  • 2019-03-08 v0.1.0 SlimIndex SlimTrie

Вказівні клавіші, діставайтеся по ключу

Діапазони покажчиків покажчиків, отримуйте за ключем

Створіть елемент індексу для кожних 4 (або більше, як хочете) клавіш.

Нехай кілька сусідніх ключів спільно використовують один елемент індексу, зменшує велику вартість пам'яті, якщо в зовнішніх даних є ключі величезної кількості. Наприклад, індексувати мільярди об'єктів розміром 4 КБ на диску обсягом 4 ТБ (оскільки один дисковий введення-випуск коштує 20 мс або для читання 4 КБ, або для читання 1 Мб).

Встановити

Усі пакети залежностей включені до постачальника/реж.

Передумови

Для користувачів (хто хотів би створювати круті речі з тонкими):

Нічого.

Для авторів (хто хотів би зробити тонкий краще):

  • dep: для управління залежностями.
  • protobuf: для повторної компіляції файлу * .proto при зміні структури даних на диску.

На інших платформах ви можете прочитати більше: dep-install, protoc-install.

Хто використовує тонкий

Відгуки та внески

Відгуки та внески дуже вдячні.

На цьому етапі супровідники найбільше зацікавлені у зворотньому зв'язку, зосередженому на:

  • У вас є реальний сценарій життя, який тонкий добре підтримує, або не підтримує взагалі?
  • Чи відповідає будь-який з API вашим потребам?

Повідомте нас, подавши випуск, описуючи, що ви робили або хотіли зробити, що ви очікували і що насправді сталося:

Або інший тип випуску.

  • 刘保海марширування
  • 吴义 谱масив
  • 张炎 泼дизайн slimtrie
  • 李文博три-стиснення, три-пошук
  • 李树龙марширування

Дивіться також список учасників, які брали участь у цьому проекті.

Цей проект ліцензований за ліцензією MIT - докладніше див. У файлі ЛІЦЕНЗІЇ.

Про

Напрочуд просторова триє в Голангу (11 біт/ключ; 100 нс/отримання).