powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Совет по архитектуре
18 сообщений из 18, страница 1 из 1
Совет по архитектуре
    #39432902
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня.
Занимаюсь нормализацией консолидирующей базы, которая собирает в себя данные еще с ~30 баз.
Вопрос: каким образом лучше выстроить серию запросов, чтобы во время консолидации данных скорость работы была максимальной быстрой, а масшабирование удобным?
Возникли следующие мысли:
1. Собирать юнионом данные из локальных таблиц; (медленно + последующие запросы будут обновлять изначальный юнион)
2. Создать серию запросов на добавления свежих данных в промежуточную таблицу в консолидирующей базе;
3. Создать в консолидирующей базе залинкованные с локальными базами таблицы из которых в последующем строить юнион.

Кратко: нужно собрать данные в единой структуре из 30 баз в одну максимально быстро, удобно и чтобы это еще и было гибко для масштабирования.

Подскажите, люди добрые, как же лучше сделать.

спасибо.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39432973
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Те самые "~30 баз" - они локально лежат или по сети доступны с другого хоста?
Реально ли нужно сперва свалить всё в кучу, а потом обрабатывать, или возможно первично обработать их по отдельности, а промежуточные результаты консолидировать и затем дообработать до конечного результата?
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433003
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

в сети с доступом от другого хоста.

нужно свалить все в кучу и обрабатывать, второй вариант невозможен, т.к. администратор всей это "структуры" один, либо ему потребуется 1 раз сделать все, либо повторить одно и тоже 30 раз.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433028
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kn9kaвторой вариант невозможен, т.к. администратор всей это "структуры" одинНи разу не обоснование.

Мне лично кажется наиболее удобным создание отдельных запросов для каждой БД, которые получают локальную копию удалённой таблицы. И дальнейшая работа уже с локальными копиями. Для копирования мне кажется наиболее разумным создать отдельный модуль с необходимыми процедурами, особенно в случае, когда список таблиц может изменяться - запросы к удалённым таблицам или линкованные таблицы явно хуже, особенно если хосты могут отключаться. Тот же модуль с учётом изменений может перестраивать и запросы для дальнейшей обработки данных.

Минус: данные могут быть неактуальными, т.е. с момента последнего копирования данных они могли измениться.

Минус: значительный объём консолидированной БД (а лимит на размер файла БД весьма невелик).

Плюс: обработка происходит локально.

Плюс: обработка не будет "затыкаться" в случае недоступности одного или нескольких удалённых хостов - при этом можно будет использовать последнюю версию полученных данных.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433057
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinakn9kaвторой вариант невозможен, т.к. администратор всей это "структуры" одинНи разу не обоснование.

Мне лично кажется наиболее удобным создание отдельных запросов для каждой БД, которые получают локальную копию удалённой таблицы. И дальнейшая работа уже с локальными копиями. Для копирования мне кажется наиболее разумным создать отдельный модуль с необходимыми процедурами, особенно в случае, когда список таблиц может изменяться - запросы к удалённым таблицам или линкованные таблицы явно хуже, особенно если хосты могут отключаться. Тот же модуль с учётом изменений может перестраивать и запросы для дальнейшей обработки данных.

Минус: данные могут быть неактуальными, т.е. с момента последнего копирования данных они могли измениться.

Минус: значительный объём консолидированной БД (а лимит на размер файла БД весьма невелик).

Плюс: обработка происходит локально.

Плюс: обработка не будет "затыкаться" в случае недоступности одного или нескольких удалённых хостов - при этом можно будет использовать последнюю версию полученных данных.

Мы ведь ведем речь об Access 2010?
Думал об этом варианте, но мне ненравится перспектива запуска процедуры, каждый раз когда нужно внести изменения, даже незначительные.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433111
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kn9kaмне ненравится перспектива запуска процедуры, каждый раз когда нужно внести изменения, даже незначительные.Какая разница, запускать процедуру или импортировать таблицу вручную? первое даже попроще будет... я уж не говорю о том, что можно хранить штамп времени последней синхронизации данных как в общей БД, так и в частных (если данные не позволяют его получить иными методами), и перезапрашивать только изменившиеся данные.

А процедуру вполне можно автостартовать при открытии БД.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433332
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Разницы нет, Вы правы, но есть альтернативы, как минимум в ввиде 30 юнионов. В этом варианте, всегда будут свежие данные.
Вопрос в том, что будет выполняться быстрее: процедура с приблудами или 30 юнионов.

то что в дальнейшем работать с процедурой будет быстрее - очевидно.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433359
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kn9kaВопрос в том, что будет выполняться быстрее: процедура с приблудами или 30 юнионов.
Процедура будет выполнять то же самое, с теми же 30 юнионами. Только в автоматическиом режиме и с обработкой всех возможных ошибок.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433545
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Если я не путаю, процедуру нельзя использовать в качестве источника данных для того же селект (или я не прав?).
Если прав, то получается, чтобы получать онтайм данные, нужно будет нажимать процедуру, каждый раз когда данные обновяться.
Каждое обновление, даже с учетом приблуд в виде получения только свежих данных и прочего, будет сначала выгружать всю таблицу из локальной БД (а их 30), в последствии ограничивая выборку и запихивая их в промежуточную таблицу. Это ведь равносильно 30 юнионам в одном запросе, который в последствии можно использовать исходником для следующей серии запросов..
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433549
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kn9kaЕсли я не путаю, процедуру нельзя использовать в качестве источника данных для того же селектЭто верно. Но я и не говорил об SQL-процедуре. Я говорил о VBA-процедуре (подпрограмме, макросе - в общем, Public Sub, а там называйте как хотите), расположенной в отдельном модуле VBA-проекта и запускаемой автоматически при старте БД и/или по запросу оператора (скажем, с кнопки формы).
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433560
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

да, я понял именно так, как Вы описали.
Мне кажется, что время работы процедуры = времени работы 30 юнионов. При учете, что данные нужно "вытягивать" из консолидированной базы довольно часто, создание процедуры просто добавляет еще 1 шаг для актуализации данных в момент необходимости.

пример:
30 юнионов: зашел в эксель - нажал обновить - он записал запрос, который джоинит справочники + 30 юнионов с базы. Подождал, получил данные.
процедура: зашел в эксель - нажал обновить - работаешь. Забыл, что нужно с локальных баз данные подятнуть - зашел в базу - нажал процедуру, ждешь. заходишь в эксель - жмешь обновить - работаешь.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433583
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kn9kaданные нужно "вытягивать" из консолидированной базы довольно частоИ за это время в частных базах данные меняются, и в консолидированной их нужно обновить?
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433670
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

неисключено.
хотя наверное, если подумать, количество этих "исправлений" в локальных (частных) БД нестоль высоко, чтобы создавать запрос для обновления онтайм данных.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39433751
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот теперь подумайте. Три десятка баз данных. В одной локальной сети и практически со стопроцентным онлайном. И все эти базы данных - в формате файловой БД. Ну не бред ли? Может, уже пора подумать о том, чтобы завести в сети какой-никакой СУБД-сервер и вывалить все данные на него? И по скорости выиграете в разы, и проблема, породившая эту тему, сама собой тихо скончается... делов-то - заменить ныне используемые локальные таблицы в частных базах данных на прилинкованные с сервера, и всё.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39434013
kn9ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

рад что вы разделяете моё негодование.
Компания большая, много бюрократии и политики. Уже начали что-то придумывать, толкать идею, но когда время дойдет до реального появления СУБД неизвестно. Может полгода, может год, а может и больше.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39434019
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kn9kaкогда время дойдет до реального появления СУБД неизвестно. Может полгода, может год, а может и больше.Ну вообще-то на начальном этапе вполне подойдёт и бюджетный вариант - выбрать станцию, на которой расположена одна из частных БД и которая работает в режиме 24*7 non-reboot, и на неё поставить какой-нибудь не очень платный сервер - хоть MS SQL CE, хоть тот же MySQL... кстати, опыт эксплуатации подобной схемы вполне способен "протолкать" нормальное решение через бюрократию и политику.
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39437796
Cam Ride
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите пожалуйста, какое из условий части WHERE будет проверяться СУБД Access быстрее (т.е. что предпочтительнее использовать?):
1. FORMAT(dDate, 'yyyy-MM') LIKE FORMAT(NOW, 'yyyy-MM')
2. YEAR(dDate) = YEAR(NOW) AND MONTH(dDate) = MONTH(NOW)
Или есть ещё более оптимальный вариант, чтобы выбрать записи за текущий месяц и год?
...
Рейтинг: 0 / 0
Совет по архитектуре
    #39437831
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
WHERE [Date] >= DateSerial(Year(Now),  Month(Now),1) 
  AND [Date] <  DateSerial(Year(Now),1+Month(Now),1)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Совет по архитектуре
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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