Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi и базы данных

Войти
Регистрация
Восстановить пароль
 
 
Shakielpel
4 / 4 / 2
Регистрация: 04.05.2014
Сообщений: 220
#1

Как лучше организовать хранение и доступ к данным? - Delphi БД

22.09.2014, 06:03. Просмотров 527. Ответов 17
Метки нет (Все метки)

На текущий момент есть набор таблиц TClientDataSet, которые не подключаются ни к какой базе данных. Т.е. то что в них заполняют просто сохраняется на диск в виде файлов. При начале работы приложения эти данные загружаются в память. Причем во время работы приложения обращение к данным таблицам не происходит постоянно. По данным таблицы создаются объекты классов которые и используются в процессе работы программы (т.е. когда все объекты созданы, база просто занимает память). Объект класса создается в момент его первого вызова, т.е. если в процессе работы программы какой то объект долгое время не вызывается, то и объект этого класса создан не будет, а это значит, что обращение к базе может произойти не только при запуске программы, но и очень потом, причем неизвестно когда, в том числе и вообще никогда.

Задача: Хранить данные базы данных на удаленном сервере в интернете. На сервере есть FTP,MySQL, Apache. (хотя это может быть любой хостинг/сервер который продают в инете, предложения также приветствуются)

Варианты которые я вижу:

1) Хранить файлы, которые ныне хранятся локально на фтп и при старте программы скачивать их и загружать в программу. Проблема: эти файлы не должны сохраняться на локальном жестком диске пользователя, как бы этого достичь? Как сделать так, чтобы скачивать могли лишь те кто получил на это разрешение, а не все подряд кто знает по какому адресу лежат эти файлы(защита фтп паролем не вариант, сегодня ему можно качать, а завтра уже нельзя. Но программа которая будет качать написана мной). Опять же, если узнать пароль к фтп, то можно стырить все базы сторонней программой, что есть катастрофа.


Второй вариант для меня темный лес, я даже не знаю возможно ли это, но:

2) Хранить данные в MySQL и: выдавать их при запросе конкретного объекта? или при старте загружать сразу все таблицы?
Проблема: Количество баз MySQL на сервере очень ограничено, а количество наборов таблиц, которые необходимо хранить как раз таки ничем не ограничено. Значит все наборы нужно хранить в одной базе, как бы это вообще организовать. Та же проблема с доступом - т.е. сначала клиент должен получить подтверждение, что имеет право получать эти данные, а уж потом получать их. Что если таких наборов будет 1000+ как это все будет выживать?

Каким путем пойти? и как к этому подступиться(если с первым вариантом более менее понятно, то со вторым нет)?
Какие еще есть советы, идеи, предложения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2014, 06:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как лучше организовать хранение и доступ к данным? (Delphi БД):

Как лучше организовать хранение данных? - Delphi БД
Всем доброго времени суток. Есть необходимость хранения в базе 500 чисел. Числа поступают в большом количестве, но нужны только 500...

Как получить доступ к данным - Delphi БД
Подскажите пожалуйста как получить доступ к полученой таблице после SQL-запроса в компонентах ADO?

Как получить доступ к данным в ADODataSet (или ADOQuery)? - Delphi БД
Добрый день. Не могу понять, как получить доступ к конкретной ячейке результирующей таблицы ADOQuery (или ADODataSet). Например, к ячейке,...

MS Access Как лучше организовать журнал накладных - Delphi БД
Приветствую товарищи :) Есть программа. В ней нужно реализовать журнал накладных. Прилагаю в скриншоте модель БД в access и скрины...

Как лучше организовать проверку введённого значения? - Delphi БД
Работаю с Oracle с помощью ADO в Delphi есть таблица STADIUMS (NAME, CAPACITY, ADDRESS), в которой есть столбец CAPACITY -...

Доступ к данным через TDBGrid и TADODataSet - Delphi БД
Добрый день! Я видел примеры, когда к данным в гриде обращаются так: DBGrid1.DataSource.DataSet.FieldByName('sum').AsFloat Сам же я...

17
mss
2334 / 2253 / 250
Регистрация: 24.12.2010
Сообщений: 13,726
23.09.2014, 23:14 #16
Так и весь кайф-то ClientDatSet'а в том, что он умеет базу гонять не целиком тудым-судым, а только локально кэшированные изменения в контролируемом им наборе данных)

Добавлено через 2 минуты
Цитата Сообщение от Shakielpel Посмотреть сообщение
20 мб это уже пипец какая большая база будет считаться
Гонять туда-сюда через Интернет по каждому чиху даже десять килобайт - затея сомнительная при любом раскладе.
0
Shakielpel
4 / 4 / 2
Регистрация: 04.05.2014
Сообщений: 220
23.09.2014, 23:37  [ТС] #17
Цитата Сообщение от mss Посмотреть сообщение
Гонять туда-сюда через Интернет по каждому чиху даже десять килобайт - затея сомнительная при любом раскладе.
где ж сомнительная, есть же, например, такие сервисы, которые предоставляют возможность играть в игры не устанавливая их к себе на комп, игры вполне себе сингл плеерные. Можно было бы поставить на комп и все, а так гоняется туда сюда все (ну конечно там смысл в том, что сервер выполняет основную работу, поэтому не совсем корректный пример, но там и также реализовано то, что ты платишь за возможность играть постоянно, а не единоразово) Поэтому если нужно извлечь из процесса выгоду материальную, то уже не сомнительная идея )

Добавлено через 3 минуты
Цитата Сообщение от mss Посмотреть сообщение
Так и весь кайф-то ClientDatSet'а в том, что он умеет базу гонять не целиком тудым-судым, а только локально кэшированные изменения в контролируемом им наборе данных)
у меня время выполнения команды посланной объекту (инфа о котором и хранится в базе) - 125 миллисекунд, и это еще мне кажется медленным. Если я буду каждый раз в инет лезть, за этой инфой, то страшно представить сколько будет это занимать по времени, поэтому не вижу другого варианта, как перед запуском скачать всю базу целиком....думаю буду ее конвертировать в объекты программы и выгружать базу из памяти сразу...вот так вот. При нормальном раскладе, программу запускают, она загружает данные и работает несколько часов автономно. Поэтому все же не на каждый чих )
0
mss
2334 / 2253 / 250
Регистрация: 24.12.2010
Сообщений: 13,726
24.09.2014, 00:00 #18
Цитата Сообщение от Shakielpel Посмотреть сообщение
есть же, например, такие сервисы, которые предоставляют возможность играть в игры не устанавливая их к себе на комп
Такого быть не может)
На клиентскую сторону распределенного приложения загружается как минимум тонкий клиент.

Цитата Сообщение от Shakielpel Посмотреть сообщение
Если я буду каждый раз в инет лезть, за этой инфой
Зачем всякий раз-то ? Только тогда когда в этом есть действительная необходимость - например, освежить весь НД или отдельные его записи, выгрузить кэшированные результаты создания/редактирования.удаления отдельных записей и т.п.

Добавлено через 10 минут
Цитата Сообщение от Shakielpel Посмотреть сообщение
скачать всю базу целиком....думаю буду ее конвертировать в объекты программы и выгружать сразу...вот так вот
Вот так вот примерно делали и делают, скажем, приложения на базе небезызвестной платформы 1С:Предприятие. И по сей день, когда 1С:Предприятие предлагает в т.ч. и трехзвенную распределенную архитектуру, продукт был и остается крайне неповоротливым монстром. В т.ч. и именно потому, что всякий раз при загрузке [тонко]клиентской части платформы и прикладной задачи под ее управлением происходит массированный обмен с БД (напрямую или при посредничестве 2-го звена) с построением огромной кучи кешированных объектов, львиная доля которых может вообще и не понадобиться на всем протяжении сеанса работы клиента.
0
24.09.2014, 00:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2014, 00:00
Привет! Вот еще темы с ответами:

Как лучше организовать хранение адресной книги? - C#
Доброго времени суток форумчане. Мне для работы программы нужно создать адресную книгу с которой пользователь выбрав в TreeView группу...

Как лучше организовать удаленный доступ - Сети
Есть такая задача. Есть сервер в центральном офисе, на нем 1С, mysql server. Пока главная задача-это подключить всех клиентов из отделений...

Как организовать хранение паролей от mysql? - C++ Qt
дело в том что не как не могу сообразить организовать программу. то есть при первом запуске программа должна попросить пароль от mysql и...

Как организовать хранение списка путей? - C#
Задача заключается в том чтобы по нажатию кнопки сделать бэкап родных файлов, и заменить их (File.Copy) файлами из другой папки. Дело в том...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.