Есть ли руководящие принципы или практики, сколько можно справиться с базой данных SQL?

Если у вас есть одна таблица со следующими столбцами:

ID, INT Обновление, Bit Status, Nvarchar (256) Путь, Nvarchar (256) Категория1, Nvarchar (256) Категория2, Nvarchar (256)

Все столбцы проиндексируются.

Мы будем обновлять 10 записей каждую секунду. Есть ли какие-либо рекомендации, когда база данных Azure будет снизить производительность. Нам нужна хранилище с 400 миллионами строк, и я обеспокоен тем, что база данных Azure SQL будет медленным для этого сценария (если вы не купите несколько планов доллара 4K). Помимо обновления БД, нам также нужно иметь возможность запросить количество строк, у которых есть определенный статус или был обновлен. Таким образом, хранение таблицы упадет на это требование.

Любой опыт с такими сценариями будет полезен или некоторые альтернативы для базы данных SQL.

0
Thomas Segato 27 Сен 2019 в 08:40

1 ответ

Лучший ответ

Это отличный и очень общий вопрос, поэтому давайте постараемся дать ему полный и надеюсь окончательный ответ.

Первое, что первое: это действительно не имеет значения, если вы храните 400 миллионов строк или 10 миллионов. Все зависит то, что вы планируете с этим делать. Если вам нужно получить доступ к одному или нескольким строкам во времени, используя условие поиска, которое может использовать индекс, вы хорошо пойти. Производительность всегда будет довольно быстрыми (миллисекунды, чтобы получить данные - одиночные или двузначные цифры в зависимости от уровня обслуживания, которую вы покупаете, - а затем, в зависимости от пропускной способности сети, других средних миллисекунд для возврата данных. Если вместо этого вы планируете сканировать Данные; например, группа и подсчитывать все строки, в которых категория равна кое-что, то вам нужно больше необработанной силы, поскольку вы сможете получить данные так быстро, как это можно сканировать. Это верно для SQL и для любого другая база данных (реляционный или noSQL).

Вторая важная вещь, чтобы иметь в виду. Тот факт, что у вас есть индекс, не означает, что они будут использоваться. Я не буду в деталях здесь, но в целом индекс полезен только в том случае, если ограничить пространство поиска. Если у вас есть 400 миллионов строк, и на 90% от той строки вы устанавливаете столбец категории на «ACME» ... хорошо, если вы ищете «ACME», вы ставите, что индекс не будет использоваться так, как оно тоже Дорого сравнить с более вариантом Naif Table (Scan). Исключением из этого кластеризована и индекс COLOPSTORE ... Если вы хотите начать узнать больше, вы можете прочитать здесь: https://medium.com/sql-server-for-fort-better-developer

Третий точка: 10 вставок в секунду почти ничего. За исключением некоторых очень базового свободного уровня вы можете легко вставить несколько сотен рядов в секунду, как общая базовая линия.

Последняя точка зрения: вы упоминаете, что один регистр должен «быть в состоянии запросить, сколько строк, которое имеет определенный статус или был обновлен». Если вы хотите отказаться от своих расходов, и будут перемещать немного довериемости данных согласованности к приложению или среднему уровню, вы можете записать свой большой стол одной транзакции и создавать другие таблицы, чтобы сохранить некоторые предварительно агрегированные данные, обновляемые и готовые к Будь запросами без необходимости сканировать весь стол. Вроде «материализованный вид». Если вы не можете сделать это, например, для того, чтобы предварительно ошеломленный стол был бы большим, как сам стол 400 м, тогда вы нуждаются в нанесении колонны (это доступно в Azure SQL), так что ошеломленная воля быть возвращенным действительно очень быстро.

Теперь какой-то вопрос для вас: какой бюджет вы ищете? Что заставляет вас думать Azure SQL может быть «слишком медленным» для вашего сценария?

PS. Полное раскрытие, я сейчас менеджер программы в Azure SQL. Я недавно присоединился до этого, что мне пришлось разобраться с чем-то очень похожим на то, что вы спрашиваете. Больше информации на этом опыте здесь: https: // medium. com / @ mauridb / from-elasticsearch-back-to-sql-server-597249c16a9d

1
mauridb 6 Окт 2019 в 00:11