none
XML или БД? RRS feed

  • Вопрос

  • Не знаю, в той ли я ветке создал тему, если что прошу прощения.

    У мяня следующий вопрос. Есть приложение WPF, в котором в достаточно большой объём работы с Image (порядка 300-400). Все картинки хранятся внутри приложения. Вопрос вот в чём - Каким образом лучше организовать хранение ссылок на все мои Image-и?

    Поиск ответа на этот вопрос в просторах инета дал вполне осязаемый ответ - малая часть голосовала за БД с типом данных Blob, остальная (большая) создавать ссылки на файлы. Лично меня это удивило. Уже год я работаю непосредственно с XML-файлами, где и храню ссылки на все Image-и, проблем с их извлечением не было. Но не смотря на мой опыт, ни один человек не упомянул хранение ссылок в XML-файле, и меня это настораживает, может я что-то не так делаю, или в использовании БД есть какие-то особые преимущества? Joseph C. Rattz в своей книге "Pro LINQ" (2008 г.) ни каких нареканий на XML и LINQtoXML не сделал, напротив, по его же словам - это его любимый способ работы с данными. Я ни на что не претендую, просто не хочется ошибиться на будущее в выборе. Спасибо.

    • Перемещено Abolmasov Dmitry 7 сентября 2011 г. 12:56 (От:Настольные ПК)
    28 августа 2011 г. 13:18

Ответы

  • > XDocument.Load("файл"); А затем стандартный запрос - Where(...XElement("Name").Value == xxx)

    а промежуточные результаты где-то сами храните. и в этом нет ничего сложно ... и подвоха нет.
    просто удобнее использовать SQL Server Compact и EF Code First.

    вместо сотен xml файлов, у вас будет один sdf.
    в коде будет что-то вроде
    class Image {
       public string Country {get; set;}
       public string Name {get; set;}
    }
    class Store : DbContext { ... }
    и запросы будете делать примерно, так:
    store.Images.Where(img => img.Name.Contains(...))...
    данные сохранять также просто. примерно так Store.Images.Add(new Image() { ... })

     

     

     

    • Помечено в качестве ответа Serdceder 29 августа 2011 г. 6:33
    28 августа 2011 г. 18:02
  • Мое мнение: Программа работает? Работает. Нарекания есть? Нареканий нет. Так расслабтесь и не партесь :)

    Задача программиста - решать задачи прикладной области. Если задача решается данными средствами - значит главная задача выполнена.

    Конечно есть и другие задачи - как то масштабируемость, расширяемость, читабельность. И по этим параметрам может БД где-то и выигрывает. Но повторюсь - это второстепенные цели. И не стоит огород городить только ради того что бы вам на форуме сказали Ohh, yes, its cool. Не стоит оно того...

    Хороший инженер  отличается от плохого тем, что может решать задачу оптимальными средствами за минимальное время. А если вы будете использовать БД просто потому что "там кто-то что-то сказал что это круто", вы всегда будете плохим инженером.



    • Помечено в качестве ответа Abolmasov Dmitry 9 сентября 2011 г. 5:23
    29 августа 2011 г. 6:44

Все ответы

  • т.е. у вас есть один xml-файл, в котором есть что-то вроде:

    <images>
      <img name="name1">
         строка, полученная с помощью Convert.ToBase64String, на основе Image
      </img>
      ...
    </images>

    или в xml файле

    <images>
       <img name="name1" src="c:\images\img1.gif" />
       <img name="name2" src="c:\images\img2.gif" />
       ...
    </images>

    28 августа 2011 г. 13:30
  • Есть несколько XML файлов (в каждом есть элемент со значением локального пути к Image-файлу), в один из них возможна запись. Путь к файлу указывается относительный. Например:

    <Root>

    <Country>

    <Name>Украина</Name>

    <ImageSource>./Pic/Ukraine.jpg</ImageSource>

    </Country>

    <Country>

    <Name>Россия</Name>

    <ImageSource>./Pic/Russia.jpg</ImageSource>

    </Country>

    </Root>

    Или вам нужно узнать, как я организовал выборку и запись непосредственно в коде?


    28 августа 2011 г. 13:57
  • а если надо найти все страны у которых в назании есть буквы У и Р
    то вы открываете каждый файл, читаете его с помощью XmlReader?

    28 августа 2011 г. 14:38
  • Это был только пример. А в принципе

    XDocument.Load("файл");

    А затем стандартный запрос - Where(...XElement("Name").Value == xxx) Можно открыть несколько файлов и сделать сложный запрос с объединением. Простите, но я не пойму, в этом есть что-то не логичное? В чём подвох? Объясните хотя бы в нескольких словах.

     

    28 августа 2011 г. 16:11
  • > XDocument.Load("файл"); А затем стандартный запрос - Where(...XElement("Name").Value == xxx)

    а промежуточные результаты где-то сами храните. и в этом нет ничего сложно ... и подвоха нет.
    просто удобнее использовать SQL Server Compact и EF Code First.

    вместо сотен xml файлов, у вас будет один sdf.
    в коде будет что-то вроде
    class Image {
       public string Country {get; set;}
       public string Name {get; set;}
    }
    class Store : DbContext { ... }
    и запросы будете делать примерно, так:
    store.Images.Where(img => img.Name.Contains(...))...
    данные сохранять также просто. примерно так Store.Images.Add(new Image() { ... })

     

     

     

    • Помечено в качестве ответа Serdceder 29 августа 2011 г. 6:33
    28 августа 2011 г. 18:02
  • У вас бедут один sdf с сотней таблиц, а как показывает мой опыт, в проэкции сто файлов будут равняться где-то 150 таблицам. И в чём выигрыш? Подключение файла осуществляется одной строкой и у вас готов набор данных, выполнение запросов и сохранение информации идентичное с БД, а ваш пример можно легко преобразовать для работы с XML

    class Image:INotifyPropertyChanged {


     public event PropertyChangedEventHandler PropertyChanged;

              // Raises this object's PropertyChanged event.
              protected virtual void OnPropertyChanged(string propertyName)
              {
                  PropertyChangedEventHandler handler = this.PropertyChanged;
                  if (handler != null)
                  {
                      var e = new PropertyChangedEventArgs(propertyName);
                      handler(this, e);
                  }
              }
       public string Country

      {

                  get { return name; }}
                  set
                  {
                     name = value;
                      OnPropertyChanged("Items");
                  }  

        }

    public string Name ...
    }

    Затем создать класс

    class Store{ ... } //где работать с xml-файлом, можно унаследовать от ObsevabeCollection<Image> и создать класс-фабрику (кажется так он называется).

    К тому же отличная проверка целостности и типов данных с помощью xsd-файлов.

    Чтобы не раздражать модератора ветки и не утомлять пользователей скучной темой я закрою тему. Спасибо за уделённое внимание.

    29 августа 2011 г. 6:32
  • > в проэкции сто файлов будут равняться где-то 150 таблицам.

    как такое возможно? покажите на примере.

    29 августа 2011 г. 6:38
  • Мое мнение: Программа работает? Работает. Нарекания есть? Нареканий нет. Так расслабтесь и не партесь :)

    Задача программиста - решать задачи прикладной области. Если задача решается данными средствами - значит главная задача выполнена.

    Конечно есть и другие задачи - как то масштабируемость, расширяемость, читабельность. И по этим параметрам может БД где-то и выигрывает. Но повторюсь - это второстепенные цели. И не стоит огород городить только ради того что бы вам на форуме сказали Ohh, yes, its cool. Не стоит оно того...

    Хороший инженер  отличается от плохого тем, что может решать задачу оптимальными средствами за минимальное время. А если вы будете использовать БД просто потому что "там кто-то что-то сказал что это круто", вы всегда будете плохим инженером.



    • Помечено в качестве ответа Abolmasov Dmitry 9 сентября 2011 г. 5:23
    29 августа 2011 г. 6:44
  • Malobukv, xml структура не нуждается в жёстком индексировании, и между таблицами не нужно устанавливать ни каких связей, от сюда - не зачем создавать лишние таблицы. Я вполне могу быть не правым и могу ошибаться, это мой опыт работы с БД.

     

    Algol36, эта тема возникла не просто так. У меня был опыт общения с несколькими инженерами, которые после моего ответа, что инфа у меня хранится в XML-файлах, смотрели на меня не с удивлением, скорее их презрение граничило с ярко выраженным высокомерием. Именно поэтому я задумался, может быть я упускаю какие-нибудь детали. Именно (и я подчёркивая это слово), именно поэтому я создал эту тему. Именно потому, что я не решаю задачи потому что, "там кто-то что-то сказал что это круто", и я хотел лично для себя уяснить разницу между этими двумя подходами в реализации хранения инфы. А заявления "Ohh, yes, its cool" ни на форуме, ни где бы то ни было для меня столь важны, поверьте.

    29 августа 2011 г. 13:51