Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как выбрать стратегию хранения данных / 9 сообщений из 9, страница 1 из 1
01.06.2013, 21:30
    #38282601
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
как сохранить/загружать данные.

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


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

вот как я вижу существующие возможности

1. БД.
тут вроде всё понятно и + и -
+++:
*удобство,понятность
*в случае ошибки можно всегда подсмотреть данные , и сторонними средствами (типа SQL manager...) найти и исправить.
---
*при больших объёмах сохранение/загрузка начинает напрягать. начиная с x Мб.
хотя можно установить что то в духе MySQL. вроде обещают скорость выше
*не мобильно. необходимо иметь доступ к БД. просто перебросить файл проекта не получится. только в рамках сети или базу выковыривать и втыкать в другом месте.

2. Сериализация
+++
*значительно быстрее чем БД
*не нужно никаких усилий , что бы реализовать.
---
*если переименовать хотя бы одно сериализуемое поле - загрузка становится невозможной(?)
*запросто может создать клоны экземпляра класса.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[Serializable]
Class A
{
  public B b;
}
[Serializable]
Class B {}
[Serializable]
Class C
{
   A a=new A();
   B b=new B();
  void K1()
  { 
     a.b=b;
  }
}
//при десериализации поля a.b и b могут не совпасть. будут идентичными клонами с разным GetHashCode()


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

3. XML подобие сериализации. соизмеримая скорость
+++
*можно переименовывать, не нужно ссылок на другие сборки
*можно поправить сохранённый файл
---
* труднее в реализации , чем сериализация.
* бинарные данные хранить в текстовом файле это преступление


4. Што то рукописное а-ля MemoryStream.Read/Write & Byte.....
+++
в работе наибыстрейший. близко к теоретическому пределу скорости.
огромный массив интов,байт, строк переваривает не напрягаясь
---
* наитруднейшей при реализации. особенно при сложной структуре.
* править и подсмотреть особо ничего нельзя. hex редакторы что то могут, но не много.


вроде как то так. мож что не досмотрел.

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


Кто что думает?
...
Рейтинг: 0 / 0
01.06.2013, 22:03
    #38282631
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
beg-in-erхочется в духе п.4 , т.к. реально это быстро, не требует ничего дополнительно устанавливать, но это целый геморрой .делать и поддерживать возможность версионности данных.


Сделал так, понравилось. Версионность отличная. Геморроя мало
...
Рейтинг: 0 / 0
01.06.2013, 22:12
    #38282637
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
PallarisСделал так, понравилось. Версионность отличная. Геморроя мало
как сделал. руками?
насколько сложная структура?
Код: c#
1.
2.
3.
4.
5.
6.
class temp
{
  int[] A1;
  int[] A2
  string[] S1;
}


если такая , то тут всё понятно. п.4. а если много сложнее и запутаннее.
...
Рейтинг: 0 / 0
01.06.2013, 22:27
    #38282640
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
beg-in-erкак сделал. руками?
насколько сложная структура?


Довольно сложная, с разными типами данных (числа, строки, bool, enumы).
Да, руками, из бинарного файла (что-то типа xml).
Каждый класс, который нужно сериализовать, наследуется от интерфейса с двумя методами ToSection (создает документ-представление объекта) и FromSection (читает параметры из документа). Каждая секция хранит в себе набор других секций и набор параметров. Весь проект состоит из таких секций с произвольной вложенностью. Другой класс умеет писать/читать эти секции из файлов.
...
Рейтинг: 0 / 0
01.06.2013, 22:29
    #38282642
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
Начиналось все это с сериализации, но версионность там я не нашел, поэтому ее оказалось невозможно использовать. Написал свою сериализацию, доволен.
...
Рейтинг: 0 / 0
01.06.2013, 22:50
    #38282646
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
Единственный геморрой - это организовать сериализацию объектов со ссылками друг на друга
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class B
{
     int...;
     string...;
     A parent;
}
class A
{
   B someB;
}



Тут уже нужно думать, чтобы при сериализации не плодить клонов, которые будут на самом деле разными объектами. Я сделал так: у всех объектов есть уникальный идентификатор, и все они сериализованы в одной секции, а в качестве параметров - коды идентификаторов. При загрузке все объекты считываются в один пул, а затем происходит восстановление ссылок по идентификаторам.
...
Рейтинг: 0 / 0
01.06.2013, 22:55
    #38282649
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
Возьми готовый вариант из NoSql
...
Рейтинг: 0 / 0
02.06.2013, 12:48
    #38282767
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
PallarisЕдинственный геморрой - это организовать сериализацию объектов со ссылками друг на друга


ну это пожалуй главный геморой , и в этом то и главный смысл.

и какая навскидку скорость. по времени. например 10 меговый файл за сколько секунд впитывается
...
Рейтинг: 0 / 0
02.06.2013, 12:56
    #38282770
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как выбрать стратегию хранения данных
beg-in-erи какая навскидку скорость. по времени. например 10 меговый файл за сколько секунд впитывается

Файл распарсивается за пару секунд. Дольше происходит инициализация объектов и их связывание, что занимает n-ое время, которое тебе ни о чем не скажет.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / как выбрать стратегию хранения данных / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]