2011-04-29 6 views
6

У меня есть база данных Access, содержащая информацию о людях (профили сотрудников и связанные с ними сведения). Передняя часть имеет один консольный интерфейс, который одновременно изменяет данные одного типа (например, академические степени в одной форме, контактная информация от другого). В настоящее время он связан с несколькими обратными концами (по одному для каждого типа данных и по одной для базовой информации профиля). Все файлы расположены на сетевом ресурсе, а многие из задних концов зашифрованы.MS Access базы данных в медленной сети: быстрее ли отделять концы?

Причина, по которой я понял, что я понимаю, что MS Access должен вытащить весь файл базы данных на локальный компьютер, чтобы делать какие-либо запросы или обновления, а затем помещать любые измененные данные обратно в общий ресурс сети. Моя теория заключается в том, что если человек меняет номер телефона или адрес (контактную информацию), им нужно будет только вытащить/изменить/заменить базу данных контактной информации, а не тянуть одну большую базу данных, содержащую контактную информацию, проекты, степени, награды , и т. д., чтобы изменить один номер телефона, тем самым уменьшив потенциал для заблокированных баз данных и сетевого трафика, когда несколько пользователей получают доступ к данным.

Это разумный вывод? Не понимаю ли я много? Я что-то пропустил?

Я понимаю, что с каждым файлом стоит рассмотрение накладных расходов, но я не знаю, насколько велико влияние. Если бы я собирался консолидировать задние концы, есть также потенциальное преимущество того, чтобы позволить Access обрабатывать ссылочную целостность для каскадных удалений и т. Д., А не кодирование для этого ...

Буду признателен за любые мысли или (разумно обоснованных) критических замечаний.

+0

Наверное, не очень помогает, но я переключился на MySql. Намного легче работать. –

ответ

8

Это распространенное заблуждение:

MS Access должен тянуть весь файл базы данных на локальном компьютере, чтобы сделать какие-либо вопросы или обновления

Рассмотрим этот вопрос:

SELECT first_name, last_name 
FROM Employees 
WHERE EmpID = 27; 

Если индекс EmpID проиндексирован, механизм базы данных будет читать достаточно всего индекса, чтобы найти, какие строки строк совпадают, а затем прочитать соответствующие строки. Если индекс содержит уникальное ограничение (например, EmpID является первичным ключом), чтение будет быстрее. Механизм базы данных не читает всю таблицу, ни даже весь индекс.

Без индекса на EmpID двигатель выполнит полное сканирование таблицы в таблице Employees - это означает, что ему нужно будет прочитать каждую строку из таблицы, чтобы определить, какие включают соответствующие значения EmpID.

Но в любом случае движку не нужно читать всю базу данных ... Таблицы клиентов, инвентарь, продажи и т. Д. ... у него нет причин читать все эти данные.

Вы правы, что для подключения к базам данных базы данных есть накладные расходы. Двигатель должен управлять файлом блокировки для каждой базы данных. Я не знаю масштабов этого воздействия. Если бы это был я, я бы создал новую базовую базу данных и импортировал таблицы из других. Затем создайте копию интерфейсного интерфейса и заново соединитесь с внешними таблицами. Это даст вам возможность напрямую изучить влияние производительности.

Кажется, что реляционная целостность должна быть веским аргументом в пользу консолидации таблиц в один внутренний.

Что касается блокировки, вам не нужно будет блокировать всю базу данных для обычных операций DML (INSERT, UPDATE, DELETE).Базовый движок базы данных поддерживает более гранулированную блокировку. Также пессимистическая или оппортунистическая блокировка - происходит ли блокировка после начала редактирования строки или откладывается до тех пор, пока вы не сохраните измененную строку.

На самом деле «медленная сеть» может быть самой большой проблемой, если медленная означает беспроводную сеть. Доступ защищен только в проводной локальной сети.

Редактировать: Доступ не подходит для сетевой сети WAN. См. this page Альбертом Д. Каллалом.

+0

Я действительно понимаю, что не читаю (если интерпретировать как где-то между «обработкой» и «исследованием») дальше, чем нужно, или ненужными столбцами или строками. Однако я хотел бы спросить конкретно, означает ли это, что только части указанного вами файла (индекс и строки с соответствующими идентификаторами) передаются по сети, и никакие другие данные вообще не передаются? ----- медленная сеть ОЧЕНЬ большая (транснациональная), перегруженная и многоуровневая проверка безопасности, но тем не менее проводная. ----- блокировка - я не блокирую блокировку db, блокировка происходит из-за зашифрованных баз данных –

+0

Кроме того, я хотел бы указать, что я бы предпочел реализовать эту функцию в среде SharePoint/SQL Server, поскольку я чувствую себя немного более комфортно с ним (правильно или неправильно). Использование контуров Front Front и Back - это то, что я считаю своим единственным вариантом, поскольку я ограничен рабочими станциями с Office и сетевым ресурсом (без использования веб-серверов, серверов баз данных и т. Д., Потому что документы будут занимать слишком много времени) я упоминал, что это небольшой офис в армии?), возможно, «медленный» менее точен, чем «лагги» –

+1

Я обновил свой ответ со ссылкой о Access и WAN. В конечном итоге у вас будет повреждение базы данных, если вы еще не получили его. Что касается того, сколько передано, достаточно, чтобы файл был достаточно прочтён для определения местоположения (в файле) системных таблиц, затем найдите смещения для таблиц данных, которые вы запрашиваете/обновляете/и т. Д. Также происходит кеширование с использованием Windows и/или вашего экземпляра приложения Access, который влияет на то, сколько данных нужно читать по-новому --- но эти данные не соответствуют моему классу оплаты. продолжение ... – HansUp