TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.6K subscribers
Post #5634 5.29K
🌳 LSM-дерево в C#

LSM-дерево (Log-Structured Merge Tree) – одна из самых мощных структур для баз данных, кэширования и key-value хранилищ.

В отличие от B-деревьев, которые часто используются в реляционных БД, LSM-дерево отлично справляется с высоконагруженными системами благодаря журналированию и периодической компактификации данных.

Как работает LSM-дерево

1️⃣ Запись идёт в память (MemTable) – все операции сначала попадают в быстрое RAM-хранилище.

2️⃣ Данные записываются в WAL (Write-Ahead Log) – чтобы не потерять их при сбое.

3️⃣ Сброс в SSTables (Sorted String Tables) – периодически MemTable записывается на диск.

4️⃣ Компактификация – старые файлы объединяются, а удалённые ключи стираются.

Пример реализации в C#:
class LSMTree
{
private SortedDictionary<string, string> memTable = new();
private const string WAL_FILE = "wal.log";

public LSMTree()
{
LoadFromWAL();
}

public void Put(string key, string value)
{
memTable[key] = value;
File.AppendAllText(WAL_FILE, $"{key}:{value}\n");
}

public string Get(string key)
{
return memTable.TryGetValue(key, out var value) ? value : "Not found";
}

private void LoadFromWAL()
{
if (File.Exists(WAL_FILE))
{
foreach (var line in File.ReadAllLines(WAL_FILE))
{
var parts = line.Split(':');
if (parts.Length == 2)
memTable[parts[0]] = parts[1];
}
}
}
}


➖Где используется

• NoSQL базы данных: LevelDB, RocksDB, Cassandra

• Поисковые системы: Elasticsearch, Apache Lucene

• Хранилища для логов и кэшей

➖ Преимущества LSM-дерева

• Быстрая запись – все изменения сначала пишутся в память

• Эффективное хранение – используется сжатие и компактификация

• Масштабируемость – отлично работает при больших объёмах данных

➖ Но есть нюансы

• Медленный поиск — требуется слияние уровней

• Утилизация ресурсов — периодическая компактификация требует CPU

🔗 Как вы храните данные в своих проектах? Делитесь в комментариях! ⬇️

🐸Библиотека шарписта
  • 👍 6
  • ❤ 1
More from @csharpproglib
  1. Oct 10, 2026Post #7285
  2. Oct 10, 2026Перенос MiniJinja с Rust на Go силами Opus и Codex Около десяти часов работы агента и прим…
  3. Oct 7, 2026Альфа-Банк ищет скиллового коллегу QA Fullstack на C# Полная удалёнка или гибрид в Москве,…
  4. Sep 30, 2026📝 Логирование со строковой интерполяцией Логирование c интерполяцией строк один из самых…
  5. Sep 28, 2026👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработа…
  6. Sep 26, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →