Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2012, 14:16   #1
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию Посоветуйте базу данных C# (.net 3.5, .net4)

При написании программных продуктов, часто сталкиваюсь с задачей хранить большие объемы данных (300000 - 500000 записей, возможно даже больше). Насколько я понимаю, самым правильным решением является использование здесь баз данных. Таким образом, я сформировал набор требований, которые предъявляю к провайдеру базы данных:
1. Производительность и скорость (объемы информации описал выше. Например это могут быть 500000 записей, хранящих информацию (различные параметры) об объектах недвижимости);
2. Возможность автоматической установки базы данных вместе с моим приложением (например посредством создания инсталлятора в Inno Setup) - чтобы пользователь не утруждал себя лишними действиями для установки еще и базы данных (грубо говоря - чтобы он даже не знал о ее существовании).
3. Работоспособность на популярных ОС (win7,xp,vista) 32 и 64 разрядных.
4. Бесплатная лицензия для коммерческого распространения

Уже пробовал разные решения. Сначала использовали sqlite - но при увеличении базы данных, тем более до таких объемов, он работает слишком медленно. Затем задействовали mssql express - но его инсталляция - это какой то ужас (то есть автоматическое скачивание и установка, настроенные в рамках проекта InnoSetup - это не проблема, но вот дальнейшее использование - постоянные проблемы то с правами, то с названием сервера базы, то еще непонятно с чем). Очень нравится вариант mysql - но, насколько я понимаю, его нельзя распространять с коммерческим приложением (точнее можно, но для этого нужно купить commercial license). Еще недавно слышал про firebird, но не пробовал что это за птица такая.

Кстати - будет ли нарушением коммерческой лицензии mysql, если Innosetup будет при установке моей программы, автоматически скачивать бд с официального сайта mysql и устанавливать ее?

Но основной вопрос - какая БД будет соответствовать всем вышеперечисленным требованиям. Также - если у вас есть большой опыт в данном вопросе - готов заплатить за консультацию по данному вопросу и создание небольшого примера инсталлятора десктопного приложения, который будет параллельно автоматически устанавливать базу данных (соответствующую вышеперечисленным требованиям), с которой данное приложение в дальнейшем сможет взаимодействовать.
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 09.09.2012, 20:03   #2
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

На мой взгляд, наилучшим вариантом является СУБД MySQL.
Она достаточно распространена, не требует много ресурсов, легко скачать дистрибутив последней версии. Легко инсталлируется. После инсталляции не требует никакой наладки переменных. Правда, встречаются советы устанавливать кое-какие параметры для поддержания русского языка, но я этого не делаю. Я активно использую MySQL уже несколько лет с параметрами по умолчанию - при этом она одинаково работает с русским языком и под Windows, и под UNIX (Linux), между которыми я постоянно переношу выгружаемые данные в обе стороны без всякого дополнительного усилия, и не было ни единого сбоя. Для этого, и вообще для работы с базами этого типа, в том числе для написания и отладки хранимых процедур, я использую только одну среду - dbForge Studio for MySQL от Devart (русскую версию), свободно распространяемую и отлично поддерживаемую, имеющую заведомо больший функционал, чем может понадобиться. Для поддержки русского языка как при работе сервера БД в Windows, так и при работе сервера БД в UNIX`ах, достаточно двух условий: 1 - создавать таблицы в коде UTF8 (советую использовать таблицы типа InnoDB, поддерживающие транзакции); 2 - при работе программы пользователя в среде Windows в connect string`е указывать: "...; CharSet=cp1251". И всё! Больше ничего не нужно.
Что касается производительности. Я проводил специальные тестовые запросы со своего ПК с Windows к удаленному серверу под Linux`ом (SELECT, INSERT, UPDATE) с размерами таблиц до 10 млн. записей. Время получения ответа было вполне приемлемым, а в пределах указанного Вами диапазона до полумиллиона записей - порядка 2-7 секунд в зависимости от сложности запроса. При 50-300 тыс. записей простые запросы происходят вообще мгновенно. По-моему, ни одна СУБД не покажет результат лучше на обычных ПК средней производительности.
В общем, простая в обращении и надёжная СУБД.
А насчет лицензирования пусть заботится заказчик. Если он не захочет лицензировать, то отвечать будет он. Но я за всю историю распространения ПО в СССР/России знаю только 1 случай, когда банк заплатил штраф Майкрософту за нелицензионное использование Windows, и то все хорошо знакомые с этой историей сошлись на том, что была такая подстава, что Майкрософту больше ничего не оставалось делать, кроме как вчинить иск. Все же понимают тяготы российских разработчиков. Если круто требовать тотального лицензирования, то в России всё остановится, а это не выгодно никому, в том числе продавцам базового софта, и особенно харда.

Последний раз редактировалось Гаврилов; 09.09.2012 в 21:50.
Гаврилов вне форума Ответить с цитированием
Старый 09.09.2012, 21:52   #3
alexplato
Пользователь
 
Аватар для alexplato
 
Регистрация: 14.11.2010
Сообщений: 47
По умолчанию

да мне mysql тоже нравится, но боюсь что по поводу лицензирования как раз придется отвечать мне) а хотелось бы чтобы все было на 100% честно
Автоматизация получения заказов для ВСЕХ ФРИлансеров!
alexplato вне форума Ответить с цитированием
Старый 09.09.2012, 21:58   #4
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Тогда выхода нет - платите денежки - спасибо скажут. Дело в том, что теперь не осталось таких СУБД, за которые при их коммерческом использовании не пришлось бы платить, по крайней мере, мне они не известны.
Firebird - это та же InterBase, со своими тараканами, как и всякая СУБД. То, что она "бесплатна", то есть слухи, что уже нет. А если даже пока и бесплатна, то где гарантия, что скоро не станет платной, как это случилось с MySQL? Хороши были разработчики и особенно заказчики-пользователи, когда они, польстившись на бесплатную СУБД MySQL, вдруг узнали, что пользуются продуктом незаконно! И что Вы думаете, они толпой кинулись платить Ораклу? Так и работают, как работали.

Есть, правда еще вариант, но плохой: сделать собственную "базу" на XML файлах данных, если ожидаются простые запросы. Тогда надо организовать "базу" (т.е. логику) так, как организуется логика "витрины данных": под запросы, пусть даже нарушаются правила реляционных СУБД. Собственно, это будет не база данных, а набор файлов, связанных логически только программно. С точки зрения программирования - это класс(ы), содержащий методы запросов к XML. В средствах разработки есть обширный инструментарий, позволяющий работать как на чтение, так и на вставку/редактирование/удаление записей в XML файлах, включая LINQ to XML. Не так трудно это сделать, но, конечно, это дополнительная работа, не поддерживаются транзакции и вообще - самодельщина. Придется, например, самостоятельно устанавливать отношения и обеспечивать целостность данных.
Для небольших объемов данных XML работает очень быстро. А для больших не пробовал, но думаю, что значительно медленнее, чем СУБД.

Последний раз редактировалось Гаврилов; 09.09.2012 в 22:48.
Гаврилов вне форума Ответить с цитированием
Старый 09.09.2012, 22:32   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но боюсь что по поводу лицензирования как раз придется отвечать мне)
FireBird бесплатна и есть провы под дотнет.
SQL Server Express кстати тоже бесплатен и более пригоден под работу из приложения на С#
Цитата:
но его инсталляция - это какой то ужас
Ты просто не разобрался )
Я его очень часто использую инсталлю и настраиваю - проблем особых не заметил. Наоборот отмечаю простую настройку по сравнению с другими СУБД
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.09.2012, 22:33   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от alexplato Посмотреть сообщение
Еще недавно слышал про firebird, но не пробовал что это за птица такая.
Это форк от Interbase. Вполне себе зрелая СУБД, на которой делаются и серьёзные коммерческие проекты (например, смета.ру использует именно эту СУБД). На коммерческое использование ограничений вроде бы не было. Есть embedded версия, которая из себя представляет с десяток файлов, которые нужно просто скопировать в директорию с программой (никаких реестров и чего-то еще не пишется). Из ограничений по сравнению с "нормальными" версиями, там только то, что dll СУБД внедряются в клиентский процесс и к одной БД нельзя подключаться из разных процессов. В принципе, и "нормальные" версии ставятся без труда и особого администрирования не требуют. Подключение к базам осуществляется по полному пути или же по имени в файле alias, что рядом с сервером лежит. Лучшая программа для создания, тестирования, отладки баз на FB - IBExpert (для жителей бывшего СССР бесплатная). Для .NET вроде было несколько провайдеров с разной степенью корявости (давно смотрел, сейчас уже должны быть готовыми для продакшена). В том же IBExpert можно быстренько собрать тестовую базу, заполнить её тестовыми же данными и протестировать запросы на предмет производительности.
Основной минус, который мне запомнился: плохая поддержка старых версий. Если на компьютере уже стоит Fb 1.6, а нужна 2.5, тогда можно поиметь проблемы в виде установки двух СУБД на один компьютер (программа, использующая 1.6 не захочет работать с 2.5 и наоборот), но с embedded версией этих проблем быть не должно. Установленная как полноценный сервер представляет из себя два процесса fbguard и fbserver. Никаких значков в трее нет. Какого-то GUI из коробки нет.
Немного непривычная работа с генераторами (мне так даже удобнее было в своём время), версионная архитектура и еще некоторые нюансы потребуют таки поближе познакомиться с этой СУБД, если решите с ней связываться. Транзакции полноценные, триггеры и даже события имеются. Корни идут от делфей, поэтому в разработчиках/спонсорах было много соотечественников, а может и сейчас есть.
pu4koff вне форума Ответить с цитированием
Старый 09.09.2012, 23:12   #7
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

На MS SQL Server`e я обжигался не раз, и как раз при сравнительно больших массивах данных. Были случаи, когда простой селект работал до 60-70 тысячной записи и молча прекращал работу, хотя в таблице надо было по условию запроса выбрать еще около 100 тыс. записей. И очень медленно! Именно поэтому я перелез на MySQL, как только там появились транзакции и хранимые процедуры.
Я бы, конечно, для таких объемов посоветовал Ingres и Oracle, про которые хорошо знаю из личного опыта, что они надёжны, но это слишком дорого.
C FireBird я знаком только по отзывам, кстати, противоречивым. Поэтому не советовал. Вы не забыли, что требуется работа с полумиллионными таблицами? Я имею сведения о медленной работе InterBase с такими объемами, и даже о потере данных. Ее ведь творили для срочной поддержки Delphi, в котором потребовалось хранить в базе компоненты, а то может быть, и не было бы никакой InterBase.
Итак, может чел рассчитывать на быструю работу этой изначально персоналочной СУБД (FireBird) с большими объемами данных и на их надежное сохранение?

Я прочитал про инсталляцию FireBird и InterBase. Вовсе не так это просто, особенно если человеку надо автоматизировать эту инсталляцию на стороне пользователя. Просто это может быть для того, кто многократно их устанавливал. (Мне сразу припомнился Марк Твен, который написал: "Не понимаю, почему это все говорят, что бросить курить трудно? Вовсе нет, я сам много раз бросал.")
А MySQL инсталлируется в полтычка: надо только запустить msi-файл. Потом можно поменять пароль рута, можно создать пользователя и дать ему привилегии - всё это из скрипта. Далее останется только запустить скрипт, полученный автоматом с базы разработчика (эту выгрузку "резервной копии" можно сделать как из командной строки, так и интерактивно в dbForge Studio for MySQL), чтобы создать и загрузить базу данных.

Последний раз редактировалось Stilet; 10.09.2012 в 07:55.
Гаврилов вне форума Ответить с цитированием
Старый 10.09.2012, 00:11   #8
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Гаврилов Посмотреть сообщение
На MS SQL Server`e я обжигался не раз, и как раз при сравнительно больших массивах данных. Были случаи, когда простой селект работал до 60-70 тысячной записи и молча прекращал работу, хотя в таблице надо было по условию запроса выбрать еще около 100 тыс. записей. И очень медленно! Именно поэтому я перелез на MySQL, как только там появились транзакции и хранимые процедуры.
Подозреваю, что SQL Server был не так настроен и т.д. и т.п. Сравнивать эти системы между собой вообще очень странно.
Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Я бы, конечно, для таких объемов посоветовал Ingres и Oracle, про которые хорошо знаю из личного опыта, что они надёжны, но это слишком дорого.
500000 записей - это большие объёмы? Тут конечно всё зависит от сложности запросов, но само хранение такого числа записей не должно быть проблемой.
Цитата:
Сообщение от Гаврилов Посмотреть сообщение
C FireBird я знаком только по отзывам, кстати, противоречивым.
Они такие про все СУБД и не только. Спросите любителя FB и он скажет, что MySQL - вообще не СУБД и наоборот. Иначе бы не было тем про SQL Server vs Oracle, Win vs Linux, ...
Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Я имею сведения о медленной работе InterBase с такими объемами, и даже о потере данных. Ее ведь творили для срочной поддержки Delphi, в котором потребовалось хранить в базе компоненты, а то может быть, и не было бы никакой InterBase.
Не знаю для чего там её делали, но FB от того IB уже далеко ушел. Так же имею сведения о работающей у нашего сметчика программе "смета.ру". База там давно была больше 2 Гб, а в ней сильно больше 500 000 записей хранилось. Программа не летает конечно, но там база еще та (нужно было одну штуку сделать и потому анализировал структуру базы). В общем, интересная там у разработчиков схемка получилась, что я не смог её до конца понять и обосновать для себя имеющиеся там решения. Короче, совсем не уверен, что проблема в FB, а не криворукости разработчиков (там собственно помимо базы много всего понаделано чему есть повод потормозить). Да и уровень там думаю другой, нежели у ТС. За 2 года ни разу база не слетала, хотя на всякий случай бэкапы ежедневные делаются (плох тот админ, что не делает бэкапов).
Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Итак, может чел рассчитывать на быструю работу этой изначально персоналочной СУБД (FireBird) с большими объемами данных и на их надежное сохранение?
Если у него прямые руки, тогда может.
Цитата:
Примеров по успешным внедрениям можно привести массу:
• Профитмед, оптовая торговля медикаментами (ERP), база 50 гигабайт, ~400 одновременных пользователей
• НПФ Стелла, системы безопасности
• Эртел, комплексная автоматизация (Аэроэкспресс)
• БауЦентр, торговля стройматериалами (Калининград) – ERP AVARDA
• КВЦ (Тула) – автоматизация автовокзалов: 200 автовокзалов в 25 регионах России – продажа билетов, бухгалтерия, аналитика, и т.д.
• ЗАО МИАН – недвижимость, центральная БД + ~20 филиалов
• Магазины МАГНИТ
Вот искусственный тест на старой версии:
http://www.ibase.ru/devinfo/fb1tb.htm
С СУБД такая тема, что их нужно уметь готовить и не нужно на птичку почем зря наезжать

Цитата:
Сообщение от Гаврилов Посмотреть сообщение
Я прочитал про инсталляцию FireBird и InterBase. Вовсе не так это просто, особенно если человеку надо автоматизировать эту инсталляцию на стороне пользователя. Просто это может быть для того, кто многократно их устанавливал. (Мне сразу припомнился Марк Твен, который написал: "Не понимаю, почему это все говорят, что бросить курить трудно? Вовсе нет, я сам много раз бросал.")
А MySQL инсталлируется в полтычка: надо только запустить msi-файл. Потом можно поменять пароль рута, можно создать пользователя и дать ему привилегии - всё это из скрипта. Далее останется только запустить скрипт, полученный автоматом с базы разработчика, чтобы создать и загрузить базу данных.
Не знаю чего там и где написано или в новой версии там чего намудрили (или же там написано про установку двух разных версий FB на один компьютер). Та же смета.ру сама как-то ставит СУБД, т.е. всё встроено в её инсталлятор. Если же отдельно ставить, то есть два варианта:
1) запускаем инсталлятор, выбираем из двух типов серверов (супер сервер и еще какой-то сервер, про их отличиям можно в интернете почитать, я уже не помню. там разница с обработкой подключений пользователей), ну а дальше всё. СУБД установлена, два процесса запущено, можно создавать базы и играться дальше.
2) вариант с embedded. ничего устанавливать не нужно. Просто бросаем содержимое архива рядом с программой.
Кстати, про пароли для рута... В птичке нет никаких рутов и с защитой баз всё достаточно печально. Шифрования тоже нет. Embedded версия еще с ролями внутри базы по сути толком не работает, если я не ошибаюсь. Если нужна защита базы, то её нужно выносить на отдельный сервер и там уже сторонними методами решать задачу. Это если критичен этот момент.

Последний раз редактировалось Stilet; 10.09.2012 в 07:57.
pu4koff вне форума Ответить с цитированием
Старый 10.09.2012, 01:05   #9
Гаврилов
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 85
По умолчанию

Никто не наезжает на Вашу огненную птичку. Пусть выбирает alexplato. Очень хорошо, что у него есть теперь больше материала для выбора.
А насчет СУБД, языков и сред программирования Вы правы, pu4koff, всегда мнений было много, и спорить можно до бесконечности. Поэтому я не собираюсь спорить. Сейчас продукты схожего назначения подравнялись, а спорщики в основном спорят на основании своих собственных устаревших взглядов (я и сам грешен).
Когда в 1990-х годах вся молодежь накинулась на Delphi и InterBase, эти продукты еще находились в несозревшем состоянии, и их обкатывали на голодных российских программерах. Я в это время работал на VAXах сначала с гораздо лучшей, чем любая из теперешних СУБД, DEC/Rdb, потом внедрял на промышленных серверах Sun СУБД CA-Ingres, потом Oracle, разрабатывал на этих СУБД базы и ПО под эти базы на C++. И мне было не до Delphi, который казался (да и сейчас кажется) неизвестно для чего сделанной реинкарнацией учебного языка Паскаль - в свою очередь, модификации Алгола, когда был уже С++, который полностью всех удовлетворял. Сейчас я несколько изменил свое мнение и считаю, что Delphi был полезен тем, что он дал хороший пинок развитию других средств разработки. А тогда мне было просто некогда заняться им поближе, я только цеплял несколько раз MS SQL Server, который был установлен правильно и действительно обладал теми недостатками, о которых я писал. Почти одновременно с InterBase появился MySQL, но он был еще совсем слабеньким. Были еще R-Base и персоналочная dBase - помните? Вот тогда были споры!
А сейчас давайте не будем спорить. "Всяк кулик свое болото хвалит".

И все же не могу удержаться.
Вот Вы все цитируете и возражаете, а сами все время пишете про сложности и недостатки InterBase.

Последний раз редактировалось Stilet; 10.09.2012 в 07:58.
Гаврилов вне форума Ответить с цитированием
Старый 10.09.2012, 05:39   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Гаврилов Посмотреть сообщение
И все же не могу удержаться.
Вот Вы все цитируете и возражаете, а сами все время пишете про сложности и недостатки InterBase.
А у MySQL нет недостатков? Или у какой-либо другой программы? Про достоинства этой СУБД и в рекламных статьях почитать можно типа той же ссылки на базу в 1Тб. А вот такие "мелочи" типа отсутствия шифрования и фактической работы ролей могут всплыть уже на поздней стадии разработки, а если это важный момент, то пиши пропало, начинай всё сначала.
Короче, с версиями 1.6 2.0 огнептицы работал, оставило это только положительные эмоции. Что там сейчас с 2.5 не знаю и в целом в энтерпрайз не внедрял. Ставилось всё в пол пинка, лицензия на корпоратив не обрезанная была, вплоть до внедрения в инсталлятор (вроде, можно было даже менять код и продавать). Под краткое описание требований полностью подходит. Производительность будет зависеть сильно от схемы, запросов и настроек сервера. В общем и целом 500 000 записей не должно быть проблемой для этой СУБД. Каких-то особых проблем с надёжностью нет, бэкапы легко делаются. Удобный инструментарий для разработки в виде IBExpert присутствует, хоть и в виде стороннего решения.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте видеокурс или мануал по созданию сайта на asp.net jojo97 ASP.NET 4 22.07.2015 23:56
Посоветуйте базу данных Steh C/C++ Базы данных 7 25.06.2012 16:12
Посоветуйте литературы по работе с opengl в c# .net Zyxer C# (си шарп) 1 14.02.2011 12:56
Подключение к базу данных SQL Server на VB.Net uchenik Помощь студентам 0 22.03.2010 10:50
Создать базу данных west23 Microsoft Office Access 2 11.02.2010 21:20