Объединение нескольких баз данных Access в одну большую базу данных

У меня есть несколько баз данных Access 2000-2003 объемом ~ 50 МБ (файлы MDB), которые содержат только таблицы с данными. базы данных расположены на сервере на моем предприятии, ответ на который может занять ~1-2 секунды (и около 10 секунд, чтобы фактически открыть файл 50 MDB вручную при просмотре в проводнике). У меня есть другие базы данных, которые содержат только формы. Большинство этих forms-database (по-прежнему файлы MDB) фактически копируются с сервера на клиент (после некоторого тестирования выполнение выглядит более плавным) перед выполнением с помощью пакетного файла. Большинство этих баз данных форм используют ссылки на таблицы для извлечения данных из баз данных.

Теперь у меня вопрос: есть ли какие-либо преимущества/недостатки в объединении всех баз данных из моих баз данных ~50 МБ в одну большую базу данных (скажем, 500 МБ)? Будет ли это медленнее? На самом деле это помогло бы очистить мой код, если бы мне не нужно было подключаться ко всем этим разным базам данных, и я не думаю, что 500 МБ — это много, но я никоим образом не претендую на то, что действительно привык к доступу, и это почему я спрашиваю. Если Access необходимо прочитать весь файл MDB, чтобы получить данные из определенной таблицы, это будет медленнее. Это не было бы таким уж удивительным со стороны Microsoft, но до сих пор я был доволен производительностью базы данных MS Access.

К базе данных никогда не будет одновременно подключено более ~50 человек (скорее всего, это число на самом деле не будет больше 10, но я предпочитаю быть немного консервативным, просто чтобы быть уверенным).


person dan    schedule 14.12.2012    source источник
comment
Если то, что у вас есть, работает хорошо, я бы не стал слишком сильно менять структуру.   -  person HelloW    schedule 14.12.2012
comment
Ну, я всегда ищу, чтобы улучшить выступления. Простое подключение к одной большой базе данных может быть быстрее, чем подключение к нескольким меньшим базам данных, отсюда и мой вопрос.   -  person dan    schedule 14.12.2012
comment
500 Мб это много для Access IMO. Вы можете использовать до 2 гигабайт в более поздних версиях Access, но я бы не советовал это в ситуации с общим файлом данных.   -  person HelloW    schedule 14.12.2012
comment
Спасибо за ваш вклад. В одной из баз данных размером 50 МБ есть только одна таблица со всем содержимым нашего каталога LDAP (около 35 тыс. строк). Для меня это ничего, я привык работать с MySQL в среде PHP (phpMyAdmin). Похоже, это уже много для Access. Но, как я уже сказал, до сих пор я был доволен производительностью: поиск по 35 тысячам строк выполняется очень быстро.   -  person dan    schedule 14.12.2012


Ответы (2)


Механизм базы данных не читает весь файл MDB, чтобы получить информацию из определенной таблицы. Он должен считывать информацию из системных таблиц (скрытых таблиц, имена которых начинаются с MSys), чтобы определить, где хранятся нужные вам данные. Кроме того, если вы используете запрос для извлечения информации из таблицы, а механизм базы данных может использовать индекс, чтобы определить, какие строки удовлетворяют предложению WHERE запроса, он может прочитать только эти строки из таблицы.

Однако у вас есть проблемы с производительностью вашей сети. Когда это приводит к разрыву соединений, вы рискуете повредить MDB. Вот почему Access плохо подходит для использования в глобальных сетях или с беспроводными соединениями. И даже в проводной локальной сети вы можете столкнуться с такими проблемами, когда сеть нестабильна.

Таким образом, хотя сокращение объема данных, которые вы загружаете по сети, является хорошей идеей, это не лучшее средство для доступа в нестабильной сети. Вместо этого вы должны перенести данные в клиент-серверную базу данных, чтобы их можно было сохранить в безопасности, несмотря на разрывы соединений.

person HansUp    schedule 14.12.2012
comment
Как я сказал ниже, миграция на клиент-серверную БД на самом деле не вариант (но может быть в будущем). Что касается обрыва связи, базы данных резервируются не реже одного раза в день, и данные не так критичны. Но вы по-прежнему отвечаете на мой главный вопрос, говоря, что Access не просматривает весь файл. Это означает, что поиск по одной и той же таблице из базы данных размером 50 МБ и базы данных 2 ГБ займет одинаковое время, верно? Тогда не будет слишком много недостатков, если мы не примем во внимание повреждение данных (вся база данных повреждена). - person dan; 14.12.2012
comment
@dnLL И все ваши пользователи одновременно работают с одной и той же БД - person Steve; 14.12.2012
comment
@dnLL Не совсем в одно и то же время, но, возможно, разница во времени недостаточна, чтобы беспокоиться о ней. Чтение метаинформации из больших системных таблиц может занять больше времени, чем из небольших системных таблиц. - person HansUp; 14.12.2012
comment
@HansUp А для повреждения данных предположим, что у вас есть 2 разных пользователя, запускающих локальный файл MDB, который содержит формы и связанные таблицы из MDB на сервере. Даже если один и тот же набор записей открыт для редактирования на обоих компьютерах, я никогда не получаю никаких ошибок. Если по какой-то причине сеть выходит из строя, соединение обычно все еще закрыто, а данные не обновляются, если не выполнено rs.Update. Как данные действительно могут быть повреждены? - person dan; 14.12.2012
comment
Хорошо, я вижу, вы хотите оспорить проблему коррупции. Я не могу предоставить подробную информацию о том, как это происходит. И я почти никогда лично не сталкивался с такими проблемами в рабочем приложении, потому что следовал советам опытных разработчиков Access, в том числе MVP, о лучших методах предотвращения повреждения. Боюсь, я больше ничего не могу предложить. - person HansUp; 14.12.2012
comment
И есть ли конкретное место, где можно найти эти MVP и/или лучшие практики? Мне просто нужно больше узнать о Access. Это поможет убедить ИТ-отдел моего предприятия, что нужен настоящий server-db. Но в то же время мне приходится работать с теми инструментами, которые у меня есть, и это инструмент Access 2007 (однако со старым форматом MDB): p - person dan; 14.12.2012
comment
Я не знаю ни одного места, где собрана вся информация о передовом опыте. Что касается MS Access в глобальной сети, см. мнение Альберта Каллала: kallal.ca/Wan/Wans .html - person HansUp; 14.12.2012
comment
@HansUp интересно читать, даже если это 2003 год (с некоторыми обновлениями в конце). Тем не менее, я никогда не сталкивался с повреждением какого-либо файла MDB, и я видел много отключений или зависаний компьютеров без причины с открытой базой данных, и это никогда не было проблемой. Это потому, что Access 2007 использует другой способ обработки данных? Должен сказать, что я не понимаю логики удаления данных из файла при его загрузке в оперативную память. У меня может быть 2 разных компьютера, загружающих один и тот же набор записей одновременно, и это никогда не было проблемой (только для чтения). - person dan; 27.12.2012

Здесь вы идете по тонкому льду.
Access справится с вашим сценарием, но на самом деле он не предназначен для обеспечения такого количества одновременных подключений.
Объединение всего в большую базу данных (500 МБ) — неразумный шаг.
Вы пытались открыть его из сетевого расположения?

Насколько я могу предположить, я буду использовать серверную часть SqlServer Express для объединения всех таблиц в единую реальную клиент-серверную базу данных.
Изменения, требуемые клиентским интерфейсом mdb, не должны быть слишком всеобъемлющими.

person Steve    schedule 14.12.2012
comment
Теоретически максимальное количество одновременных пользователей равно 255, 50 не должно быть проблемой для хорошо написанной базы данных. Максимальный размер базы данных MS 2010 составляет 2 ГБ, поэтому 500 МБ вряд ли можно назвать большой базой данных. Единственный важный момент, который важен для любой системы, заключается в том, что она должна быть хорошо спроектирована. office.microsoft.com/en-ie/ доступ-помощь/ - person Fionnuala; 14.12.2012
comment
Так много, вы говорите о 50? Я действительно думаю, что это действительно небольшое число, для меня так много означает, например, 1k. Я думаю, у Access есть свои ограничения. Что касается SqlServer, то это не вариант. У меня нет прав администратора ни в сети, ни в компе компа. Я могу создавать или редактировать файлы MDB, но ничего не могу установить. Я просто пытаюсь сделать все возможное, чтобы помочь моим коллегам работать более эффективно с этими небольшими базами данных. - person dan; 14.12.2012
comment
Спасибо Рему за ваш вклад. Но тот факт, что сервер расположен на удаленном сервере, который пингует > 1 с, и что таблицы связаны, не влияет на размер базы данных? Когда я связываю одну и ту же таблицу из базы данных 500 МБ и из базы данных 50 МБ, это занимает одинаковое время, потому что Access не заботится о других таблицах? Или он читает всю базу данных, даже если в этом нет необходимости? Это больше то, о чем мой вопрос. Я мог бы провести некоторое тестирование, но я ленив и, честно говоря, предпочитаю искать кого-то, кто более привык к Access, например, вас, чтобы узнать, что вы можете сказать об этом. - person dan; 14.12.2012