Пример базы данных на основе плоских файлов

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

Если возможно, было бы хорошо видеть учебное руководство, которое имело слой данных, который использовал простую, пользовательскую базу данных на основе плоских файлов. Пример, который сохраняет пользовательские бизнес-объекты в XML и затем загружает их, был бы хорош, потому что XML так популярен и легок работать с.

Я также был бы благодарен за любые ссылки на сайты, которые обсуждают лучшие практики относительно дизайна баз данных на основе плоских файлов и т.д.

Моя цель состоит в том, чтобы иметь решение для того, чтобы хранить простые данные на машине пользователя и иметь их не, нуждаются в любом специальном установленном программном обеспечении (как SQL Server, и т.д.) для выборки данных из того, где это хранится.

Я знаю, что это - очень общий вопрос, но любой совет, который может указать на меня в правильном направлении, приветствуется.

6
задан John Fischer 16 August 2013 в 17:17
поделиться

7 ответов

[

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

] [

]XML - это не []плоский формат файла [] (или плоская файловая база данных), но из прочтения вашей цели это звучит так, как будто вы на самом деле хотите, чтобы это была реляционная база данных, а не фактический плоский файл. [

] [

]Как и другие, я могу настоятельно рекомендовать SQLite для этой цели. Существуют привязки для различных платформ, .NET имеет []System.Data.SQLite[], который в одном файле является и провайдером, и движком базы данных. [

] [

]Большим преимуществом использования SQLite является то, что реальная база данных полностью содержится в одном файле, контролируемом вашим приложением, и что она поддерживает стандартные команды SQL DDL и DML (т.е. SELECT, INSERT, UPDATE, DELETE, CREATE DATABASE/TABLE и т.д.).[

] [

]Для одного пользовательского приложения SQLite является отличным (одним из лучших) способом хранения как данных приложения, так и его настроек. В последнее время []был диск[], что он может поддерживать даже маломасштабные многопользовательские приложения. [

] [

]Однако, Oracle, MySQL, SQL Server и т.д. определенно предпочтительны для многопользовательских приложений (даже для небольших приложений), если у вас есть возможность доступа/использования сервера баз данных.[

] [

]Также не забывайте, что выбор базы данных не является взаимоисключающим. [

] [

]У вас может быть многопользовательское приложение с богатым пользовательским интерфейсом, установленным на компьютерах многих пользователей. Центральная база данных здесь действительно должна быть многопользовательской db, такой как MySQL. Но в рамках богатого клиентского интерфейса SQLIte идеально подходит для хранения настроек каждого пользователя, или, возможно, для обеспечения поддержки в автономном режиме, когда база данных не может быть доступна.[

].
4
ответ дан 17 December 2019 в 04:47
поделиться
[

]Текстовые форматы, такие как []CSV[], []INI[], []XML[], могут использоваться для хранения структурированных данных, однако IMO не являются гибкими или эффективными для использования в качестве баз данных.[

] [

]Я рекомендую []SQLite[] в качестве отличной альтернативы. Это очень мощный, легкий и автономный движок баз данных. [

]
0
ответ дан 17 December 2019 в 04:47
поделиться
[

]Вы можете взять свой торт и съесть его тоже:[

] [

][]SQLite[] - это база данных SQL, которая состоит из одного файла и не требует установки, она имеет привязки для многих языков и работает на разных платформах.[

] [

]Нет необходимости в том случае, если Вы упомянули, писать свой собственный слой данных поверх плоских файлов. На самом деле, если вам не нужны учебные упражнения, я бы не советовал это делать.[

].
0
ответ дан 17 December 2019 в 04:47
поделиться
[

] Доступно несколько встроенных баз данных, о которых вашему пользователю не придется беспокоиться вообще.[

] [

]SQLLite - распространенная, популярная, кроссплатформенная и т.д. Зависит от языка реализации. Если вы используете Java, то их несколько, например, Derby. .NET - это не мой ballywick, но я думаю, что там что-то есть. Как минимум, у MS есть свободно используемый рабочий стол, встроенный SQL движок, который вы можете использовать.[

] [

]Написание собственного может быть интересным упражнением, но это колесо уже сделано, и просто проще и эффективнее использовать существующую базу данных, чем начинать с нуля. Это никак не повлияет на ваших пользователей, так что если это основной драйвер, то нет причин не использовать доступный продукт/проект[

].
0
ответ дан 17 December 2019 в 04:47
поделиться
[

] В Perl есть модуль []DBD::CSV[], который может загружать csv-файлы и опрашивать их с помощью SQL-запросов. Но для Вашей цели я думаю, что Вам лучше исследовать []SQLite[], которая является правильной реляционной базой данных, работающей без сервера.[

].
0
ответ дан 17 December 2019 в 04:47
поделиться
[

] Вместо того, чтобы изобретать базы данных заново, почему бы не связать ваше приложение с простым движком баз данных? Базы данных бывают разных размеров, не все они огромные :-)[

] [

]Если вы хотите заново изобрести колесо, то, глядя на исходный код простых открытых движков баз данных, следует указать вам правильное направление.[

].
0
ответ дан 17 December 2019 в 04:47
поделиться

Ваш обработчик событий DoWork shoud периодически проверяют BackgroundWorker. CancellationPending и набор DoWorkEventArgs. Отменить к истинному прежде, чем возвратиться, если это было отменено.

Обработчик событий RunWorureCompleted должен проверить свойство RunWoreyCompletedEventArgs.Canceled , чтобы определить, отменен ли обработчик событий DoWork (установите значение DoWorkEventArgs.Cancel ).

В случае условия гонки может случиться так, что пользователь запросил отмену ( BackgroundWorker.Depending имеет значение true), но работник ее не увидел ( RunWoreyCompletedEventArgs.Canceled имеет значение false). Вы можете проверить эти два свойства, чтобы определить, что это произошло, и сделать все, что вы выбрали (либо рассматривать это как успешное завершение - потому что работник действительно закончил успешно, или как отмену - потому что пользователь отменил и больше не волнует).

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

EDIT

В ответ на комментарий - если существует несколько классов, которые должны обнаружить Pending , нет никакой альтернативы передаче этим классам ссылки на тип, такой как BackgroundWorker , который позволяет им получить эту информацию. Вы можете абстрагировать это в интерфейс, что я обычно делаю, как описано в этом ответе на вопрос о BackgroundWorkers.Однако необходимо передать ссылку на тип, реализующий этот интерфейс, рабочим классам.

Если необходимо, чтобы рабочие классы могли задавать DoWorkEventArgs.Cancel , необходимо либо передать ссылку на это, либо принять другое соглашение (например, логическое возвращаемое значение или пользовательское исключение), которое позволяет рабочим классам указывать, что произошла отмена.

-121--4998555-

Я согласен с многочисленными комментариями, предполагающими, что лучше использовать существующее ядро базы данных. Однако в качестве попытки фактически ответить на вопрос:

  • Чрезвычайно распространенным форматом базы данных плоских файлов является Xbase (файлы обычно с расширениями .dbf). Вы можете погуглить для «xbase» и «dbf» и найти много информации и любое количество драйверов. Вы должны быть в состоянии извлечь довольно много намеков и советов, если вы действительно заинтересованы.
  • Если вы хотите играть с тем, который очень вероятен в вашей системе, вы можете использовать ODBC «Microsoft Text Driver». Если у вас есть какие-либо данные Microsoft для доступа к данным на вашем компьютере, вероятно, у вас есть этот драйвер. Я не знаю точно, но он, вероятно, установлен с MDAC. Этот драйвер будет считывать и записывать текстовые файлы, разделенные запятыми (наряду с другими форматами).
0
ответ дан 17 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: