Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603

Хранение малого количества данных без БД

20.07.2013, 12:41. Показов 2536. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
интересует вопрос хранения малого количества данных (менее 2 мб) в 1 файле.

знаю что есть такие механизмы как JSON сериализация, XML сериализация, в принципе меня они устраивают,
однако может есть какой-нибудь способ сериализациии данных кроме предложенных, может он будет более функциональным, быстрым, эффективным?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.07.2013, 12:41
Ответы с готовыми решениями:

Хранение большого количества бинарных данных
Возник вопрос связаный с хранением данных: Мне нужно сохранять массивы бинарных данных (каждый массив - 4096 элементов по 1 байту) Если...

Хранение большого количества однотипных данных
Добрый день. Подскажите, каким образом хранить данные для программы? Например, у меня имеется 1000 - 300 000 строковых данных, которые...

Хранение приложением большого числа картинок малого размера на разных ОС
Добрый день. Столкнулся с такой проблемой - разрабатывается кросплатформенное приложение (Windows, Android, возможно,IOS). Приложение...

12
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
20.07.2013, 18:46  [ТС]
нашел пока бинарный сериализер типов array и record структур

https://code.google.com/p/kblib/

исходник

Delphi Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  uKBDynamic, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Memo1: TMemo;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
type
  struct = record
    num: integer;
    str: string;
  end;
  karr = array of struct;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  k: karr;
  i: integer;
  s: TFileStream;
  memotext: string;
begin
  SetLength(k,25);
  Randomize;
  for i := Low(k) to High(k) do begin
    k[i].num:=random(100);
    k[i].str:='hello world' + IntToStr(i);
    memotext := memotext + Format('%d - %s '#13#10,[ k[i].num, k[i].str ]);
  end;
 
  Memo1.text:= memotext;
 
  s:=nil;
  try
    s:= TFileStream.Create('hello.bin',fmOpenReadWrite or fmCreate);
    TKBDynamic.WriteTo(s, k, TypeInfo(karr)); // << запись данных
  finally
    s.free;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  k: karr;
  i: integer;
  s: TFileStream;
  memotext: string;
begin
  s:=nil;
  try
    s:= TFileStream.Create('hello.bin', fmOpenReadWrite);
    TKBDynamic.ReadFrom(s,k,TypeInfo(karr));  // << чтение данных
    for i := Low(k) to High(k) do begin
      k[i].num:=random(100);
      k[i].str:='hello world' + IntToStr(i);
      memotext := memotext + Format('%d - %s '#13#10,[ k[i].num, k[i].str ]);
    end;
    Memo1.text:= memotext;
  finally
    s.Free;
  end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo1.Clear;
end;
 
end.
Хранение малого количества данных без БД
Вложения
Тип файла: zip test Serialiser Delphi XE.zip (87.7 Кб, 3 просмотров)
0
332 / 85 / 16
Регистрация: 10.01.2011
Сообщений: 516
Записей в блоге: 1
20.07.2013, 23:29
ини файлы попробуйте
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
21.07.2013, 05:03
JSON сериализация, XML сериализация
От лукавого.

Быстрый индексный доступ обеспечит любая подходящая (single file) Key-Value DB (NoSQL).

Если перезапись нечастая, то CDB может быть идеальным вариантом. Обратите внимание на TinyCDB - 2+ Kb
"накладных расходов", произвольная длина ключа и данных, мгновенное чтение (memory mapped file).

cdb (software)
TinyCDB - a Constant DataBase

+ именно для Delphi есть такая "игрушка" как RealIsam (Отдельная DLL, но меньше 100 Kb).
1
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
21.07.2013, 11:50  [ТС]
Цитата Сообщение от gazlan Посмотреть сообщение
От лукавого.

Быстрый индексный доступ обеспечит любая подходящая (single file) Key-Value DB (NoSQL).
как бы в данном случае не требуется "Быстрый индексный доступ" так как, вся "БД" будет прочитана из файла в память и представлена в "Delphi понятном виде"

Единственно требование это: относительно простое развертывание и свертывание структуры обратно в файл

--
по ссылкам у вас все заточено под С++, и требует дальнейшего допиливания напильником для Delphi, а следовательно не может "легко и просто" использовано в данном случае
0
1075 / 988 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
21.07.2013, 12:17
Если структура данных такая как представлена во втором посте, то вполне подойдет класс TStringList.
И чтение из файла с записью в файл просты до безобразия, сортировка, если нужна, пожалуйста, доступ к данным по
индексу и по строке.
0
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
21.07.2013, 12:25  [ТС]
Если структура данных такая как представлена во втором посте,
это пример, полей будет больше - около 10

то вполне подойдет класс TStringList
не подойдет, ибо, если надо будет хранить:

- двумерный массив
- массив текстов с переносами строк
- массив структур

то столкнемся опять с проблемой кодирования/декодирования данных при хранении.

В конце концов есть JSON
0
Заблокирован
21.07.2013, 17:00
Менее 1 мегабайта - это работа как раз для SQLITE! Причём в зависимости от скорости лучше иметь memtable и при выходе только записывать/грузить при старте.
1
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
21.07.2013, 18:56
Цитата Сообщение от noname_club Посмотреть сообщение
столкнемся опять с проблемой кодирования/декодирования данных при хранении
(Де)сериализацию вам неизбежно придется делать для хранения сложных структур. Но, раз индексный доступ не требуется, посмотрите в сторону Structured Storage

~600 Kb SQLite DLL для хранения такого же размера данных - это "из пушки по воробьям".
0
Заблокирован
21.07.2013, 19:09
gazlan, плюс сжатие dll, хотя ты странные вещи говоришь, ты что, не видел сколько весит libxml? А из системных можно хоть custom hive реестра использовать для сериализации, около нуля кода, но ОЧЕНЬ неудобно, о чём и речь.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
21.07.2013, 19:58
Цитата Сообщение от Dr_Quake Посмотреть сообщение
не видел сколько весит libxml?
Признаться, не видел. XML не использую.

Попутно, вводная статья по STG: СОМ-хранилища: подпольная файловая система
1
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
21.07.2013, 20:32
Цитата Сообщение от noname_club Посмотреть сообщение
есть какой-нибудь способ сериализациии данных кроме предложенных, может он будет более функциональным, быстрым, эффективным?
Из того что всегда прямо под рукой и не требует ничего стороннего:

TADODataSet
TClientDataSet


Structured Storage - на нем сидит верхом весь Microsoft Office
0
 Аватар для noname_club
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
21.07.2013, 22:11  [ТС]
в дополнение к Structured Storage

Компонент TRyStorage

http://www.delphikingdom.com/a... mode=print
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.07.2013, 22:11
Помогаю со студенческими работами здесь

Хранение большого количества данных (5 миллиардов пар чисел)
Всем привет! У меня возникла следующая проблема. Необходимо хранить в программе последовательность примерно из 5 миллиардов пар чисел,...

Хранение данных в приложении без бд
Всем привет. Как лучше хранить небольшое количество информации, типа данных пользователя, настроек приложения, на устройстве? Первое что...

Хранение данных без базы
Здравствуйте, скажите, пожалуйста, как можно сохранить данные (буквально 4-5 строчек), не используя базу? Что-то вроде...

Хранение и отображение данных без использования БД
Ребят помогите с решением, вернее просто направьте в нужное русло нужно написать небольшую программку, которая хранила бы в себе...

Хранение файлов и файловый менеджер в файле(листе) Excel, Бинарное хранение данных в CustomProperty листа Excel
Всем привет! Хочу поделится наработками, которые получились в процессе реализации своих задач. Отдельная благодарность! Андрей VG, за...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Результаты исследования от команды MCM (март 2025 г.)
Programma_Boinc 07.04.2025
Результаты исследования от команды MCM (март 2025 г. ) В рамках наших текущих исследований мы продолжаем изучать гены, которые имеют наибольшую вероятность развития рака легких, выявленные в рамках. . .
Рекурсивные типы в Python
py-thonny 07.04.2025
Рекурсивные типы - это типы данных, которые определяются через самих себя или в сочетании с другими типами, которые в свою очередь ссылаются на исходный тип. В мире программирования такие структуры. . .
C++26: Объединение и конкатенация последовательностей и диапазонов в std::ranges
NullReferenced 07.04.2025
Работа с последовательностями данных – одна из фундаментальных задач, с которой сталкивается каждый разработчик. C++ прошел длинный путь в эволюции средств для манипуляции коллекциями – от. . .
Обмен данными в микросервисной архитектуре
ArchitectMsa 06.04.2025
Когда разработчики начинают погружаться в мир микросервисов, они часто сталкиваются с парадоксальным правилом: "два сервиса не должны делить один источник данных". Эта мантра звучит повсюду в. . .
PostgreSQL в Kubernetes: Автоматизация обслуживания с CNPG
Mr. Docker 06.04.2025
Администраторы баз данных сталкиваются с целым рядом проблем при обслуживании PostgreSQL в Kubernetes: как обеспечить правильную репликацию данных, как настроить автоматическое переключение при. . .
Async/await в TypeScript
run.dev 06.04.2025
Асинхронное программирование — это подход к разработке программного обеспечения, при котором операции выполняются независимо друг от друга. В отличие от синхронного выполнения, где каждая последующая. . .
Многопоточность в C#: Синхронизация потоков
UnmanagedCoder 06.04.2025
Многопоточное программирование стало неотъемлемой частью разработки современных приложений на C#. С появлением многоядерных процессоров возможность выполнять несколько задач параллельно значительно. . .
TypeScript: Классы и конструкторы
run.dev 06.04.2025
TypeScript, как статически типизированный язык, построенный на основе JavaScript, привнес в веб-разработку новый уровень надежности и структурированности кода. Одним из важнейших элементов этой. . .
Многопоточное программирование: Rust против C++
golander 06.04.2025
C++ существует уже несколько десятилетий и его поддержка параллелизма постепенно наращивалась со временем. Начиная с C++11, язык получил стандартную библиотеку для работы с потоками, а в последующих. . .
std::vector в C++: от основ к оптимизации производительности
NullReferenced 05.04.2025
Для многих программистов знакомство с std::vector происходит на ранних этапах изучения языка, но между базовым пониманием и подлинным мастерством лежит огромная дистанция. Контейнер std::vector. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер