Возможна ли структура сущностей с древовидной структурой вместо списка? - PullRequest
3 голосов
/ 15 апреля 2019

Хорошо, поэтому я занят написанием API для этого сервиса, над которым я работаю.Сейчас БД довольно огромная.У клиента много проблем с производительностью.Может быть от 1 до 4 млн записей (из БД), с которыми одновременно работает один клиент.C # использует список IEnumarable (.toList ()) для хранения данных при извлечении.Однако проблема в том, что основная структура данных представляет собой массив.Таким образом, O (n) для основных операций.Который очень медленный при работе с большими объемами данных и использует слишком много памяти и вычислительной мощности.

Один из подходов, который я думаю использовать для решения этой проблемы, - это использование красно-черного дерева вместосписок.Поскольку мне нужны быстрые вставки и удаления, RB-дерево (сбалансированное) дает гарантированную производительность O (logn).

Код для дерева RB сделан и очищен и больше не нуждается в модификации.(там все хорошо работает).Но могу ли я использовать эту структуру данных вместо списка?Для этого мне нужно знать, что возвращается в методе GET.(Как данные выглядят в списке).

Имя таблицы в БД, над которой я работаю, - AspNetUser.Идентификатор (первичный ключ) имеет тип nvarchar (128)

Структура дерева RB: RedBlackTreeNode.cs (определяет узлы) RedBlackTree.cs (определяет основные операции)

Хранится следующим образом с использованием обобщенных элементов: RedBlackTree (TKey, TValue)

Важное примечание: Использование ADO.NET Entity Data Model

То, что у меня сейчас есть:

//GET api/AspNetUsers
public IEnumerable<AspNetUser> Get()
        {
            using (APEntities entities = new APEntities ()) { 

                return entities.AspNetUsers.ToList(); //Is this returning the whole list with each record in the table as an entry?
            }
        }

Как мне сделать RB-Реализация дерева?Как это ?:


RedBlackTree<String, AspNetUser> RBT;

//GET api/AspNetUsers
        public RedBlackTree<String, AspNetUser> Get()
        {
            // How to iterate through each record and add to the tree structure?
        }

В RedBlackTree.cs

 public sealed class RedBlackTree<TKey, TValue>
  {
     public void Add(TKey key, TValue value){...}
     .
     .
     .
  }

Как каждая запись в AspNetUsers будет сохранена как «TValue», а идентификатор в AspNetUsers будет как «TKey» -Для RedBlackTree (TKey, TValue).

...