2009-08-14 3 views
1

Я разработал сетевое приложение, которое используется в моей компании последние несколько лет. В начале он управлял информацией о пользователях, правах и т. Д. С течением времени он вырос с другой функциональностью. Он вырос до такой степени, что у меня есть таблицы, скажем, 10-20 столбцов и даже 20 000 - 40 000 записей.C# и Access 2000

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

Я бы перенес этот проект на SQL Server, но, к сожалению, это невозможно сделать в этом случае.

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

У нас есть довольно огромная система, использующая dBase IV. Насколько я знаю, это полностью многопользовательская система баз данных.

Возможно, это будет полезно использовать вместо доступа? Что заставляет меня не сомневаться в том, что dBase IV намного старше Access 2000. Я не уверен, было ли это хорошим решением.

Возможно, есть другие варианты?

+0

С какой версией .net вы работаете? 3.5 должен иметь возможность открыть базу данных доступа с помощью драйверов odbc/oledb. –

+0

Приложение разработано на C# .and и работает на NET 2.0 – Mariusz

+0

Итак, это приложение C# winForms, которое ваши пользователи запускают на своих рабочих столах? –

ответ

1

Access - это не плоская система файловой системы! Это реляционная система баз данных.

+0

Хорошо. Я понимаю, о чем вы говорите. Я имел в виду, что у него нет движка, такого как SQL Server, Oracle и т. Д. – Mariusz

+0

Я думаю, что он означает один файл, то есть один файл mdb. Точно так же sqlite и sql в любом месте являются файлами с одним файлом. –

+0

Но это вряд ли «реальная» система баз данных. –

1

Вы не можете использовать SQL Server Express? В противном случае MySQL является хорошей базой данных.

Но если вы не можете установить ЧТО-НИБУДЬ (вы должны попасть в эту политику раньше, чем позже, или позже), просто используйте существующую систему баз данных.

В основном с доступом, он не может обрабатывать более 5 человек, подключенных одновременно, или он будет поврежден.

+0

Я не могу установить какое-либо программное обеспечение в этой сети. – Mariusz

+0

Вы должны попросить уметь, особенно если он используется и важен. –

+0

думаю это такой же. Но, к сожалению, это не сработает. Существует много политики, которая не полностью понята для меня. В конце концов нет ничего, что можно установить в сети. Один из способов - использовать то, что вы можете просто скопировать и запустить ... – Mariusz

2

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

+0

Спасибо за ответ. Я также спрашивал о dBase IV, потому что в нашем случае он управляет примерно 300-500 обновлениями и вставками в час без остановки, выполненными 20-30 пользователями сети. Это звучит для меня. С другой стороны, я слышал о плохих вещах о Access. Я слышал даже, что это не хорошо для более чем одного пользователя из довольно известных людей, например, Карла Франклина на DotNetRocks. – Mariusz

+2

Это сводится к написанию столкновений. Единственный поврежденный доступ db, с которым я столкнулся, - это тот, который имел форму ui, которую мы поделили в офисе. С другой стороны, в качестве db у меня есть базы данных доступа, которые поддерживают нескольких людей с большими проблемами. –

+2

Карл Франклин, имеет тенденцию развлекать и преувеличивать. И большинству людей нравится bash Access. –

5

Если у вас возникли проблемы с вашим задним концом Jet/ACE с количеством записанных вами записей, это звучит так, как будто у вас проблемы с дизайном схемы или неэффективно структурированное приложение.

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

Итак, вы должны посмотреть на свою индексацию, если вы видите полное сканирование таблицы.

Вы не указали свою популяцию пользователей. Если ему больше 25 или около того, вам, вероятно, удастся увеличить ваш задний конец, особенно если вы уже привыкли к SQL Server.

Но проблема, которую вы описали для таких крошечных таблиц, указывает на ошибку проектирования где-то в вашей схеме или в вашем приложении.

FWIW У меня были приложения Access с концами Jet с 100 тысячами записей в нескольких таблицах, которые использовались десятками одновременных пользователей, добавляющих и обновляющих записи, а время ответа на получение отдельных записей и небольших наборов данных было почти мгновенным (за исключением нескольких сложных операций, таких как проверка вновь введенных записей для дублирования в отношении существующих данных - это медленнее, потому что он использует большое количество сравнений LIKE и оценку выражений для сравнения). То, что вы испытываете, не являясь интерфейсом Access, не соизмеримо с моим многолетним опытом работы с базами данных Jet всех размеров.

+0

Спасибо за это. Вы упомянули, что не вся таблица тянется к стороне клиента. Это что-то новое для меня и этой же фантастической новости. Можете ли вы указать мне какой-то источник, который более подробно объясняет базы данных доступа? ??? – Mariusz

+0

Во-вторых, я хотел упомянуть, что я не писал enywhere, что у меня возникают проблемы с моим приложением. На самом деле я этого не делаю. Он работает нормально. Единственное, о чем я беспокоился, это тот факт, что он растет быстрее, чем я думал. Я просто не знаю, когда он достигнет своих пределов ... Благодарим за указатели. Если это правда, то, что вы говорите, очень важно иметь хорошие индексы. Reagrds Mariusz – Mariusz

+1

Неудачная вещь о документации по работе двигателя базы данных Jet - это то, что Руководство разработчиков двигателей Jet Database никогда не было загружено в сеть и никогда не обновлялось для Jet 4.0. У меня есть печатная версия версии Jet 3.5, последняя опубликована, и она полна вещей, которые я нигде не знаю. –

4

Для записи этот ответ копируется/редактируется с another question Я ответил.


Aristo,

Вы можете использовать Access в качестве вашего централизованного хранилища данных.

Это просто НЕ ИСТИНА, что доступ будет задыхаться в многопользовательских сценариях - по крайней мере, до 15-20 пользователей.

Это правда, что вам нужна хорошая стратегия резервного копирования с файлом данных Access. Но в последнее время я проверил, что вам нужна хорошая стратегия резервного копирования с SQL Server. (С очень важным предупреждением, что SQL Server может делать «горячие» резервные копии, но не Access.)

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

Недавно я ответил на другой вопрос о том, как разделить вашу базу данных на два файла. Ссылка здесь. Creating the Front End MDE

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

Если я могу упомянуть еще одно ... смешно, что ваша компания не даст вам других вариантов развертывания. Конечно, есть кто-то, кто обладает какой-то силой, и вы можете «представить себе жизнь без вашего заявления». Мне просто интересно, есть ли у вас больше власти, чем вы могли бы понять.

Сет

+0

Спасибо за это. Я не буду комментировать политику своей компании, потому что это действительно круто. Дело в том, что компания, в которой я работаю, не является строго связанной с ИТ и состоит из семи отдельных компаний.В конце концов, они являются одной крупной корпорацией, но некоторые из их, скажем, сетей «филиалов» контролируются некоторыми внешними фирмами; и вот проблема, потому что они имеют «стандарты» и не допускают определенных вещей. – Mariusz

+0

Было бы очень трудно объяснить, потому что я сам тоже не получаю все это. Просто хотелось немного рассказать о том, как иногда можно перекручивать вещи. Второе, что я работаю среди ИТ-специалистов, но я только разработчик. Остальные люди, с которыми я работаю, не имеют понятия о том, что я делаю. Они видят только готовые продукты. Они также не получают требований «развития» и считают, что если это возможно сделать, не заплатив несколько тысяч за Sql Server, это именно то, что мы будем делать. – Mariusz

+0

Есть и плюсы такого рода среды. Один из них заключается в том, что никто не говорит мне, как я должен выполнять свою работу. (исключая случаи, о которых мы говорим :-) В любом случае, Live продолжается, и я должен жить с Jet DB в данный момент ... Постараюсь узнать больше о Jet ... – Mariusz

2

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

На самом деле нет. Это распространенное искажение, распространенное людьми, которые не понимают, как работает Jet, механизм базы данных внутри Access. Вытягивание всех записей или чрезмерное количество записей происходит, потому что у вас нет всех полей, используемых в критериях выбора или сортировки в индексе. Мы также обнаружили, что индексирование полей yes/no aka boolean также может иметь огромное значение в некоторых запросах.

Что действительно происходит, так это то, что Jet сбрасывает страницы индекса и страницы данных, которые требуются.Хотя это намного больше данных, чем механизм базы данных, это создаст не всю таблицу.

У меня также есть клиенты с записями 600K и 800K в разных таблицах, и производительность в порядке.

+0

«клиенты с 600K и 800K записей в разных таблицах »- это те, которые вы рекомендовали перенести на SQL Server, нет? – onedaywhen

+0

Да, хотя по разным причинам, чем чистый объем записей или производительности. Более того, предприятия выросли в размерах, поэтому стоит потратить усилия на повышение по сравнению с риском коррупции. За последние десять лет эти клиенты в основном увеличили или увеличили объем работы в десять раз. –

2

У нас есть приложение базы данных Access, которое используется довольно сильно. У меня было 23 пользователя на всех одновременно, без каких-либо проблем. Пока они не имеют доступа к одной записи, у меня нет никаких проблем.

У меня есть несколько форм, которые используются и обновляются несколькими различными отделами. Например, у меня есть форму Quoting, которая содержит 13 разных вкладок и 10-20 полей на каждой вкладке. Пользователи обычно находятся в одной записи за несколько минут редактирования и поиска информации. Чтобы избежать конфликтов записи, я вызываю функцию ниже при каждом изменении поля. Пока это не новая запись, она обновляется.

Function funSaveTheRecord() 
    If ([chkNewRecord].value = False And Me.Dirty) Then 
     'To save the record, turn off the form's Dirty property 
     Me.Dirty = False 
    End If 
End Function 

Они, как у меня все настройки выглядят следующим образом: PDC.mdb < - Front End, хранимый на компьютере пользователя. У каждого пользователя есть своя копия. Ссылки на таблицы, найденные в PDC_be.mdb. Содержит все формы, отчеты, запросы, макросы и модули. Я создал форму, которую я могу использовать для включения/выключения бипаса смены клавиш. Только у меня есть к нему доступ.

PDC_be.mdb < - Назад Конец, хранящийся на сервере. Содержит все данные. Только форма и VBA, которые он содержит, включают включение/выключение бипаса смены клавиш. Только у меня есть к нему доступ.

Secured.mdw < - Файл безопасности, хранящийся на сервере.

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

Эта база данных работает без ошибок и коррупции более 6 лет.