Вызов всех гуру MSSQL-сервера!В настоящее время я работаю над проектом, который включает таблицу со следующим макетом:
[DbNodeClosures]
[Id] BIGINT PRIMARY KEY IDENTITY NOT NULL,
[ParentID] BIGINT NOT NULL,
[ChildID] BIGINT NOT NULL,
[Глубина] INT NOT NULL
Эта таблица закрытия используется для хранения родительских и дочерних отношений и в настоящее время имеет следующие индексы:
[IX_DbNodeClosures_ParentID] ON [dbo]. [DbNodeClosures] ([ParentID])
[IX_DbNodeClosures_ChildID] ON [dbo]. [DbNodeClosures] ([ChildID]) ВКЛЮЧИТЬ ([Depth], [ParentID])
[IX_DbNodeClosures_ParentID-ChildID][dbo]. [DbNodeClosures] ([ParentID], [ChildID]) INCLUDE ([Depth])
Запросы к этой таблице обычно включают запрос всех идентификаторов детей с использованием parentID или наоборот.Строки в этой таблице только вставляются или удаляются, но не обновляются.В настоящее время у нас это работает, и с 600 миллионами строк производительность все еще остается превосходной, однако мы собираемся перейти к периоду миграции, когда это число превысит 1,2 миллиарда строк и со временем потенциально вырастет до 30+ миллиардов строк.При 600 миллионах строк текущая таблица, включая индексы, занимает около 30 ГБ памяти на нашем сервере SQL.
Итак, теперь реальные вопросы:
Насколько хорошо это масштабируется?
Будет ли снижаться производительность запросов при увеличении количества строк?
Будет ли производительность при вставке и удалении значительно снижаться при увеличении количества строк?
Я изучал такие варианты, как разбиение таблиц (доступно во всех версиях MSSQL server 2016+) и индексы ColumnStore, но у меня нет реального опыта работы с ними и не имею реального опыта работы с масштабированиемтаблица MSSQL для миллиардов строк.(И да, мы рассматриваем оптовый переход на NOSQL для его преимуществ масштабирования, но это будет непомерно дорого с точки зрения стоимости разработки) Я видел, что другие (NASDAQ) могут получать квинтиллионы строк, поэтому я думаю,это возможно, и я надеюсь, что кто-то, кто имеет опыт в этой области, может дать некоторое представление о том, что он увидел, в том, что касается производительности и масштабирования SQL-сервера на этих уровнях.Спасибо за любые мысли!