Вопросы MS Access - Масштабируемость / индексация / транзакции - PullRequest
3 голосов
/ 07 октября 2008

Несколько вопросов по базам данных MS Access -

Размер. Существуют ли ограничения на размер базы данных доступа? Причина, по которой я спрашиваю, состоит в том, что у нас есть база данных доступа с несколькими простыми таблицами. Размер БД составляет около 1 ГБ. Когда я делаю запрос по нему, я вижу, что это занимает более 10 минут для запуска.

При надлежащем индексировании MS Access сможет справиться с этим или существуют фундаментальные ограничения для технологии.

Это MS Access XP.

Кроме того, MS Access поддерживает транзакции БД, фиксацию и откат?

Ответы [ 8 ]

4 голосов
/ 07 октября 2008

Здесь вы получите много разных ответов, но в МОЕМ МНЕНИИ доступ просто не является масштабируемым решением. Он не очень хорошо справляется с многопользовательскими ситуациями, когда вы начинаете приближаться к размеру 1 Гб, стабильность начинает становиться главной проблемой, а в действительности у нее просто нет производительности.

Что касается поддержки транзакций, см. этот Microsoft Artic le.

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

2 голосов
/ 07 октября 2008

В ответ -

Размер: максимальный размер базы данных Access составляет 2 ГБ.

Транзакции: Транзакции полностью поддерживаются базовой базой данных JET.

Из прошлого опыта я склонен сказать, что вы, вероятно, достигли максимально допустимого размера и, возможно, стоит подумать об увеличении до SQL Server Express.

0 голосов
/ 08 октября 2008

Jet может быть очень хорошим хранилищем данных для любого количества платформ разработки десктопов, не только с самим Access. Это всегда был первый выбор для разработчиков VB и до сих пор (по уважительной причине).

MDB 1 ГБ, который, как ожидается, не будет сильно расти, не должен быть проблемой с точки зрения скорости или надежности. Если он медленный, значит, вы неправильно его проиндексировали или пишете очень неэффективный SQL. Примером неэффективного SQL было бы применение выражений WHERE к выражениям, которые поэтому не могут использовать индексы - примером будет

WHERE Year([MyTable].[MyDate]) = 2002

в отличие от

WHERE MyTable.MyDate Between #1/1/2002# And #12/31/2002#

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

Но ключевым фактором является то, насколько быстро растет MDB. Если вы экстраполируете исторические темпы роста и приближаетесь к 2 ГБ в течение 5 лет, я бы сказал, что вам нужно увеличить размер в ближайшее время. Если это больше похоже на 10 лет, вы, вероятно, должны сделать это в любом случае. Если это 20 лет, то не так много.

0 голосов
/ 08 октября 2008

Мое впечатление от чтения групп новостей Access за эти годы состоит в том, что механизм ACE / Jet (файл .accdb, .mdb или .mde) в настоящее время рекомендуется только при использовании MS Access в качестве среды разработки на основе форм RAD с использованием связанных форм. Если у вас нет клиентской части Access, то есть мало аргументов в пользу серверной части ACE / Jet при рассмотрении гораздо более масштабируемых (и функциональных) альтернатив: SQL Server Express или SQL Server Compact Edition для магазинов MS, MySQL, и т.д.

Что касается поддержки транзакций в движке ACE / Jet, то да, он присутствует и является родным. Другой ответ связан со статьей об использовании транзакций через DAO: обратите внимание, что многие аспекты DAO ограничены, потому что его разработка отстает от механизма и транзакций - один из примеров. К счастью, вы можете использовать SQL DCL: BEGIN TRANSACTION, COMMIT TRANSACTION, ROLLBACK TRANSACTION и т. Д., Чтобы выполнить то, что невозможно с DAO, например. вложенные транзакции. SQL DCL требует, чтобы интерфейс доступа находился в режиме запросов ANSI-92; использование ADO будет работать, потому что ADO использует этот режим изначально. Для получения более подробной информации см .:

Расширенный Microsoft Jet SQL для Access 2000

0 голосов
/ 07 октября 2008

Хотя это уже много лет назад, когда стоимость входа в установку SQL Server была такой же непомерно высокой, как у Oracle, один из моих клиентов использовал Access, чтобы попытаться управлять центром входящих вызовов.

Мы говорим о концепциях очень больших баз данных VLDB, 40 миллионов строк. Это было в эпоху, когда телефонные компании выкатывали идентификаторы вызывающих абонентов и предлагали своим абонентам способ получения бесплатного идентификатора вызывающего абонента. Из-за ценовых ограничений им пришлось игнорировать мои просьбы сделать инвестиции в SQL Server.

На практике казалось, что Access потерял около 800 МБ. Мы разбили таблицы на несколько баз данных Access, чтобы справиться с нагрузкой. Хотите верьте, хотите нет, это работало прекрасно. Клиент был благодарен.

На практике, учитывая наличие SQL Express, я бы также рекомендовал пойти по этому пути.

0 голосов
/ 07 октября 2008

Я не уверен, что они все еще есть в версии XP, но в Access 97 были варианты компактности и восстановления. Если это все еще варианты, они могут помочь.

0 голосов
/ 07 октября 2008

Максимальный размер базы данных Access составляет 2 ГБ. Вы можете обойти это, используя связанные таблицы в других файлах, но, возможно, пришло время использовать более надежную базу данных, если у вас уже есть проблемы с производительностью.

Я рекомендую посмотреть на SQL Server Compact , который является бесплатной базой данных на основе файлов, или, что еще лучше, SQL Server Express , который - «облегченная» версия SQL Server, которая будет поддерживать нескольких пользователей и совместимость с SQL Server. Оба ограничивают вас 4 ГБ баз данных.

Все упомянутые продукты, включая Access, поддерживают транзакции.

0 голосов
/ 07 октября 2008

Лично я обнаружил, что «полезный» лимит находится в диапазоне пары сотен мегабайт.

Доступ предназначен для небольших баз данных. Для крупных, т. Е. Не только тех, которые вы и пара-несколько человек используете, вы должны обратить внимание на «настоящие» СУБД, такие как SQL Server, ORacle, DB2, MySQL и т. Д.

РЕДАКТИРОВАТЬ - см. http://www.blueclaw -db.com / vb_transaction_processing.htm способ обработки транзакций с помощью Access Видимо это не родной.

...