Хорошо, поэтому я занят написанием 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).