Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / распухание таблицы. работа в сети. / 7 сообщений из 7, страница 1 из 1
23.11.2005, 03:59
    #33393663
sunteem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
В БД имеется таблица, которая ежегодно будет пополняться 400 000-ми записей. И все эти записи должны быть всё время доступны для просмотра и выборок по сети.

Подскажите, пожалуйста, насколько всё это будет тормозить, и что можно сделать?

может, имеет смысл эту таблицу разбивать на несколько таблиц по какому-либо критерию с сохранением доступности информации?
...
Рейтинг: 0 / 0
23.11.2005, 09:01
    #33393775
foxwizard
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
А на SQL-сервер не думал перенести ?
...
Рейтинг: 0 / 0
23.11.2005, 09:36
    #33393834
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
Давай считать, причем ограничение наступит скорее из-за размера файла в 2Г.

Предположим, что одна запись в таблице занимает 500 байт (2 поля с(254), 0.5 Кб), тогда
2 000 000Кб/(400 000 * 0.5) = 10 лет понадобится для достижения предельного размера файла. По аналогии посмотри сколько занимат одна запись.

Теперь по кол-ву записей за наши 10 лет появится 4 млн записей, что < 1 млрд возможных записей в таблице.

Про скорость выборки - если у тебя запросы будут использовать Rushmore оптимизацию (те построены грамотные индексы), то скорость выполнения будет быстрой, конечно если ты не собираешься вытягивать по млн записей за раз.
...
Рейтинг: 0 / 0
23.11.2005, 13:13
    #33394600
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
Вообще-то, и партиционирование может быть в конкретном случае хорошим вариантом.
Партиционировать надо по такому критерию, который позволит в дальнейшем:
- работать с набором таблиц наиболее простым образом,
- поможет оптимизации выполнения запросов на выборку данных в большинстве случаев.

Пример реализации А.
В многочисленных случаях в качестве критерия партиционирования подходит дата создания записи. В этом случае:
1. Запись всегда осуществляется в таблицу, соответствующую текущему периоду - что хорошо, потому что код заполнения таблицы получается ничуть не сложнее, чем в случае с одной таблицей.
2. Предусматривается процедура "закрытие старого / открытие нового периода", которая создает таблицу-часть, соответствующая новому периоду и устанавливает на нее хранящийся где-то контекст работы с периодами. Предыдущая таблица-часть объявляется недоступной для дальнейшего редактирования (закрытой).
3. Для выборок можно:
- либо сделать допущение: выбираем только из одного периода за раз (тогда тот же select, который мы бы написали для единой таблицы, полностью подойдет, только придется как-то фразу "from" определять до выполнения этого запроса),
- либо немного усложнить код, например, формировать составной select union select динамически (но период, интересующий пользователя, все равно надо запросить до того), или уже иметь параметризованный local view, в котором все объединения уже сделаны и осталось только подставить параметры, или обойтись без sql-операторов, обойдясь только командами xBase (или используя их комбинацию: несколько select-ов каждый раз из одной партиции в цикле с append-ами в общую выборку).

Пример реализации Б.
То же, что и A, но изначально мы пишем в "оперативную" часть таблицы, откуда потом (уже после того, как запись получит атрибут "закрыта окончательно" - т.е. дальнейшего редактирования записи уже не будет) разносим в части-партиции для архивного хранения. Соответственно, в запросах объединяем (по обстоятельствам) не только к части-партиции, но и оперативную часть.

Лично мне милее вариант Б.
...
Рейтинг: 0 / 0
23.11.2005, 13:14
    #33394607
Urri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
Но вариант А лучше оптимизируется.
...
Рейтинг: 0 / 0
23.11.2005, 15:03
    #33394943
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
Добавлю ещё (полу)вариант к предложенным Urri ;)

Исходим из следующих фактов:
1) ограничение в 2GB на файл (не таблицу, а именно файл, т.к. это может быть fpt файл) наступит гораздо раньше достижения гипотетического миллиарда записей;
2) в сегрегировании нуждаются обычно только одна, две большие таблицы, остальные спокойно укладываются в допустимые пределы.

В качестве решения можно в основной таблице, содержащей внешний ключ на сегрегированные данные, хранить помимо собственно ключа еще и ключ сегрегации, указывающий в какой физически таблице эти данные находятся. Доступ к данным немного усложняется, зато дробить можно как угодно, например автоматически при превышении какого-то размера (не обязательно дотягивать до 2GB, можно существенно меньше)

(У меня сейчас более 10 млн записей в год - ничего, работаем. Смотрим не один год в сторону Оракл + Аппликейшн, но пока всё работаем :) )
...
Рейтинг: 0 / 0
24.11.2005, 15:34
    #33397745
sunteem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
распухание таблицы. работа в сети.
Спасибо!

Буду думать.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / распухание таблицы. работа в сети. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]