Какая база данных лучше всего подходит для моих нужд? - PullRequest
2 голосов
/ 24 марта 2010

В настоящее время я использую MS SQL Server 2008, но я не уверен, что это лучшая система для этой конкретной задачи.

У меня есть одна таблица, например:

PK_ptA PK_ptB DateInserted LookupColA LookupColB ... LookupColF DataCol (ntext)

Общий запрос

SELECT TOP(1000000) DataCol FROM table 
WHERE LookupColA=x AND LookupColD=y AND LookupColE=z
ORDER BY DateInserted DESC 

Таблица содержит около миллиарда строк с 5 миллионами вставок в день.

Моя главная проблема с SQL Server заключается в том, что не так просто разделить или разложить файлы данных. Кроме того, кажется, что экспорт достигает максимума со скоростью 1000 строк в секунду (около 1 МБ / с), что кажется очень медленным.

Другая проблема, с которой я сталкиваюсь, связана с SQL Server, если я хочу добавить новый LookupCol, файл журнала сильно увеличивается, что требует большого количества редко используемого свободного места при нажатии.

Есть ли какие-либо очевидные лучшие решения этой проблемы?

Ответы [ 2 ]

3 голосов
/ 24 марта 2010

У вас проблема, и это не SQL Server. позвольте мне также игнорировать тот факт, что у вас плохой дизайн стола.

  • Распространение файлов данных на самом деле довольно просто. Реорганизовать позже не так просто, но и выполнимо. Как ваша таблица, файловая группа и расположение файлов?
  • экспорт 1 Мб в секунду - это шутка. Шутки в сторону. Я обрабатываю 150 миллионов файлов строк за несколько минут - это сокращает до 60 000 строк в минуту. Что-то бесится. Временное пространство? Вы делали анализ производительности? Как выглядит оборудование?
  • Ничто не будет работать для использования журнала. Как и большинство профессиональных баз данных, журнал содержит все измененные страницы базы данных во время транзакции. Добавление изменений поля - ВСЕ страницы.

Вы должны:

  • Перепроектируйте базу данных (используйте представление, чтобы сохранить ту же старую таблицу на месте, если хотите), чтобы она не отображала «LookupColA» и т. Д., А нормализовала (LookupValue и столбец LookuPTable, закодированный с помощью «» «). Таким образом, вы получаете мгновенные дополнительные поля. Это превращается в хранилище данных, подобное схеме звезды.
  • Провести анализ производительности. Похоже, у тебя есть некоторые проблемы.
  • Определенно сообщите нам о своем оборудовании;)

Эта проблема здесь определенно НЕ является SQL Server, она связана с неправильным дизайном таблиц И - возможно - недостаточным - плохо используемым оборудованием.

0 голосов
/ 24 марта 2010

ОК, оформление таблицы (отдельный ответ). Lokup - это басовые таблицы поиска.

Так ....

  • LookupTable
  • pk (int)
  • TABLETYPE
  • Значение как поля

  • * 1017 встроенный язык *

  • рк

  • Таблица ValueLookupMap

  • пк записи ValueTable
  • пк записи LookupTable

Итак, в основном, если вы добавляете «поле поиска», вы просто создаете набор записей в LookupTable, а затем добавляете записи в ValueLookupMap.

...