|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Задача: Есть товарные строки. Много. От пары миллионов штук и дальше. Формат хранения: "товар"/"услуга" -> рубрика -> подрубрика -> ... -> наименование_товара -> параметр -> значение. То есть как таковой товарной строки текста - нет. Всё делится на товары или услуги, в каждой рубрике может быть вложение произвольной глубины подрубрик, в том числе и "похожих". Товар - в основном, имя существительное в ед.ч. и может иметь произвольный набор параметров (в среднем 20-50шт.), в том числе и "исторического вида", меняющих свое значение со временем - например, цена. Для таких значений надо хранить "историю" и возвращать соответствующее дате выборки значение. Множество параметров определяется наименованием товара. Значение может быть булевым, числовым, перечислимым, текстом или наименованием товара или (под)рубрики. Один товар может входить в несколько разных подрубрик, впрочем подрубрики также могут быть вложены в несколько разных верхнего уровня. Нужны быстрые операции: 1. выборки "среза" в виде "(подрубрика) - товар - параметры - значения" по заданному набору пар "параметр"-"значение" или только по "значениям"; 2. добавления параметров и их значений; 3. перенос товара из одной (под)рубрики в другую; 4. добавления рубрик, товаров и др.. в многопользовательском режиме; 5. Формирование для вывода полнотекстовой строки по заданному набору наименований товаров из его наименования и значений параметров. Здесь нужна реакция в районе 0.5сек для выборки из 25-100 позиций. 6. Требуется логирование/журналирование изменений в данных. Как реляционное решение вижу создание нескольких таблиц: "рубрики" - nested sets, "товары", "связка товар-рубрика", "параметры", "связка наборы параметров товаров", "значения параметров"... но подозреваю, что работать оно будет медленно, хотя бы потому что основной доступ - это левые джойны по нескольким таблицам, а в ряде случаев - ещё и повторные (значение = товар). По сути модель данных - иерархическая. Насколько могут подойти нереляционные СУБД типа mumps/Cache, D3... может кто-то может посоветовать что-то ещё? Заранее благодарен за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2011, 11:50 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
http://www.fisglobal.com/Products/TechnologyPlatforms/GTM/index.htm Она ко всему еще и бесплатная. Не вижу что бы указали платформу. GT.M под .nix ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2011, 12:07 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Мне кажется, ваша задача прекрасно решается в реляционных СУБД. Не бойтесь "нескольких таблиц", в М это будет не менее трудоемко. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2011, 17:22 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Valeriu, Пасибки, mumps видел, даже немножко осваивал... вот тоже склоняюсь к ней. Особенно, ежели учесть, что планируется достаточно сложная логика по работе с объектами хранения. Но, если честно - язык М просто пугает. Ладно, было время, когда писал в автокоде... но этож когда было! Вопрос: если я возьму GT.M или оригинальный mumps, то можно будет, выдернув саму БД в исходниках, основные задачи решать, например на С++, обращаясь к БД как к библиотеке? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 06:08 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Блок А.Н., Есть на Мускуле, аналогично нормализованная адресно-поисковая система "Фирмы-отделы-сотрудники-телефоны-адреса-заметки-задачи"... Так вот для таблиц со средним размером в 50-150к записей, среднее время выборки составляет 2.5сек. Это на 2-х процессорном, 4-х ядерном серваке, с мозгами около 8гб и дисковой подсистемой на рейд-0 со скоростью передачи от 180Мбайт в сек... Проблема в том, что практически каждый запрос требует левого объединения (данные в таблицах не полны) от 3-х до 15-и таблиц. Это - труба. В реальности тянет не более 30-и пользователей, а далее сжирает все ресурсы сервака на 100%... Имея такой опыт, к Мускулю особого доверия - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 06:15 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
не нашел как править свой пост. Там, в примере, запросы поиска данных по условию, например найти фирмы в городе Н, с телефоном отдела снабжения и без заметок за последние 20 дней - ваще выполняются от 30сек... планы запросов вылизаны за полтора года эксплуатации уже "дальше некуда"... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 06:18 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Valeriu, платформа, конечно же *.nix. Если точнее Debian Linux - последняя устойчивая сборка. Сейчас стоит ядро 38. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 06:21 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
авторВопрос: если я возьму GT.M или оригинальный mumps, то можно будет, выдернув саму БД в исходниках, основные задачи решать, например на С++, обращаясь к БД как к библиотеке? По такому принципу пошли InterSystems пуская в оборот свою бесплатную БД Globals: http://www.globalsdb.org/ , но, пока только для Java. Обещают в будущем и для других языков. Посмотрите еще сюда http://gradvs1.mgateway.com/main/ Там же http://www.mgateway.com/docs/universalNoSQL.pdf Делайте вывод. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 08:47 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Еще забыл. Там же http://gradvs1.mgateway.com/main/ "The M/Wire Protocol for GT.M and Caché" можно решать как Вы сказали. Использовать только базу, а внешне обращаться из другого окружения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 08:54 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Arhat109Задача: Есть товарные строки. Много. От пары миллионов штук и дальше. Формат хранения: "товар"/"услуга" -> рубрика -> подрубрика -> ... -> наименование_товара -> параметр -> значение. То есть как таковой товарной строки текста - нет. Всё делится на товары или услуги, в каждой рубрике может быть вложение произвольной глубины подрубрик, в том числе и "похожих". Товар - в основном, имя существительное в ед.ч. и может иметь произвольный набор параметров (в среднем 20-50шт.), в том числе и "исторического вида", меняющих свое значение со временем - например, цена. Для таких значений надо хранить "историю" и возвращать соответствующее дате выборки значение. Множество параметров определяется наименованием товара. Значение может быть булевым, числовым, перечислимым, текстом или наименованием товара или (под)рубрики. Один товар может входить в несколько разных подрубрик, впрочем подрубрики также могут быть вложены в несколько разных верхнего уровня. Нужны быстрые операции: 1. выборки "среза" в виде "(подрубрика) - товар - параметры - значения" по заданному набору пар "параметр"-"значение" или только по "значениям"; 2. добавления параметров и их значений; 3. перенос товара из одной (под)рубрики в другую; 4. добавления рубрик, товаров и др.. в многопользовательском режиме; 5. Формирование для вывода полнотекстовой строки по заданному набору наименований товаров из его наименования и значений параметров. Здесь нужна реакция в районе 0.5сек для выборки из 25-100 позиций. 6. Требуется логирование/журналирование изменений в данных. Такую задачу я решил в прошлом году при помощи SQL Server 2008. Для хранения параметров товаров был использован паттерн EAV. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 11:17 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
практически задачу Склад пытаться решить на документарной БД - это как минимум смешно... Это задача для реляционной БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 12:25 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Arhat109Блок А.Н., ... Имея такой опыт, к Мускулю особого доверия - нет. Вообще говоря, MySQL в каком-то смысле достаточно убогая СУБД, имел немного опыта работы с ней и авторитетно судить скорее всего не имею права, но тем не менее. В том числе верю и в то, что она тормозит там где тормозить негде. Я сам работаю с Каше много лет, и могу сравнивать М подход и реляционный. И скажу, что М имеет смысл при каких-то очень нестандартных и тяжелых задачах. Там где можно применять реляционный - надо применять реляционный (благо Каше позволяет использовать оба). Ваша задача вполне обычна, остался вопрос выбора адекватной СУБД и прямых рук. Кстати, в каше join почти нет необходимости использовать из-за их синтаксиса их SQL, а если есть необходимость выбирать данные из нескольких таблиц, то я стараюсь делать запрос по одной таблице и "вручную" собирать данные из других нужных. Так экономится куча времени сервера и становится гораздо меньше вероятность ошибки компилятора запросов. Данные - несколько таблиц с несколькими десятками миллионов записей, время выборки данных - доли секунд. (если это, конечно, не суммарные выборки по всем данным-тогда время выборки десятки минут). Правда железо достаточно мощное. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 18:13 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Flying Dutchman, Не нашел описания паттерна (мож плохо искал). Как догадываюсь, речь идет о чем-то типа "сущность-параметр-значение", так? Если так, то опять же подозреваю, что иерархические БД, ваше решение обставят на порядок, хотя бы потому, что они под него "заточены", или нет? Сложность, которую виже "невооруженным глазом": 1. Рубрика "фотокамеры" -> набор объектов "фотоаппарат" -> с параметром "объектив" -> значение "объектив-х1". 2. Подрубрика "запчасти к фотоаппаратам" -> набор объектов "объектив", в т.ч. "объектив-х1" -> с параметром "светосила" -> значение "от:2.8 до:5,6" 3. Сколько потребуется обращений к БД для ответа на вопрос: найти все товары с параметром "светосила" и значением "4.3"? 3а: Все части схемы "сущность-параметр-значение" хранятся каждое в своей общей таблице? Я так понимаю надо в таблице имен параметров найти параметр "светосила", затем разыскать все его подходящие значения и только потом смотреть к каким товарам они привязаны. Т.е. как миниум джойн на три нехилых таблицы. На самом деле больше. 3б: Для каждого вида значения, а то и параметра заводить отдельную таблицу... джойним небольшие таблички, но предварительно выясняем чего джойнить... хотя, тут возможная сильная оптимизация кешированием... 3в: ?!? Речь, насколько понял об MS SQL SERVER, так? Позволяет ли он формировать "динамические" запросы (косвенное указание таблиц и/или полей, используемых в запросе)? Так, к примеру, Мускул позволяет только через prepare/execute, что "катастрофически" медленно, хотя бы потому, что каждый раз требуется перекомпиляция. Пробовал даже создавать хранимку, которая генерит относительно постоянные prepare - "пофиг". Можете ли пояснить достигнутые результаты: скорость выборок/ пользователей / железо? Мне реально интересно, потому как "что такое SQL" - знаю уже лет ..надцать, и возвращаться во времена плохого бейсика с командами в один символ - очень не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 21:42 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Winnipuh, Это не задача "Склад". Хотя последний может быть частью задачи. Задача - хранить подробные, структруированные описания товаров с возможностью перестройки описаний. В частности, пары "параметр"-"значение" могут быть "нетипизованы", т.е. не иметь описания параметра. Например, "Кирпич, М-125", "Кирпич М-75, желтый", "Кирпич М-100, силикатный", и т.д. В какой-то момент надо уметь создать парметр "Марка кирпича" и объединить значения "М-75", "М-100", "М-125"... логика выделения "кандидатов" - в тестовом варианте, худо-бедно есть. Вопрос как хранить сами данные. К предыдущему примеру: требуется найти не только базовые объекты "объектив", но и все комплекты, куда он входит. В данном примере "фотокамеру", хотя в описании её параметров в прямом виде параметра "светосила" - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 22:07 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Arhat109, Народ, вот ещё накопал: Mongo DB - насколько может подойти, и как шустра? Вроде тоже чего-то типа key : value... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2011, 22:16 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Flying DutchmanТакую задачу я решил в прошлом году при помощи SQL Server 2008. Для хранения параметров товаров был использован паттерн EAV. Ау, автор! Ну очень интересны хоть какие-то подробности! Так решил, или просто попиарил? ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 21:12 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Arhat109Мне реально интересно, потому как "что такое SQL" - знаю уже лет ..надцать, и возвращаться во времена плохого бейсика с командами в один символ - очень не хочется.Вот тут вы зря совершенно наехали на М. Как язык он совершенно нормальный и свои задачи выполняет. Ваша проблема не в языке, а в описании модели системы, т.е. сущность-связь и все такое. Ее необходимо делать при реализации на любом языке, но почему-то вам кажется, что уйдя от SQL задача решится проще. Как раз задача в другом - загнать модель в жесткие рамки, а не "сделать возможным все" Задача с кирпичами решается через поля тип-категория-подкатегория, и это подойдет и для кирпичей, и для самолетов, и для мороженного мяса. Задача с комплектами (в каких типах в комплекте есть тип "объектив") тоже решается через SQL. Есть, подозрение, что в желании сделать идеально вы уходите в дебри и сами себя запутываете. В свое время я тоже думал, что гибкость системы можно поднять, используя связку объект-параметр-значение, но потом понял, что в системе уже есть метаданные, и вводя такую схему, мы выносим метаданные на прикладной уровень. И у нас есть уже три уровня - данные, метаданные и метаданные о метаданных, что изврат для реляционных систем. Не говоря уже о том, что в такой схеме хранения сложно(или невозможно) будет сделать хорошие индексы. (Но том же М, где системных метаданных нет, хранение метаданных на уровне приложения будет нормальным.) Если у вас параметры типов все-таки разные и их много, то стоит рассмотреть такое "некрасивые" решения: Если у вас число типов сущностей более-менее адекватное, и их можно впихнуть не в тысячу таблиц, а хотя бы в 10-20, то я бы делал разные таблицы, а потом уж динамическим SQL определял, какая их них и какие поля мне мне нужны. Либо делать таблицу с тысячью полей и большую часть их не заполнять, правда многие СУБД от этого распухнут. Ну как вариант, сделать на Каше и затолкать все эту внутрь объектов. Там действительно можно сделать все что угодно, причем с достаточно высоким уровнем абстракции. Но хитроумного изврата там будет - уу.. И мне еще не очевидно, что нужно идти таким путем. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2011, 21:50 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Arhat109Flying DutchmanТакую задачу я решил в прошлом году при помощи SQL Server 2008. Для хранения параметров товаров был использован паттерн EAV. Ау, автор! Ну очень интересны хоть какие-то подробности! Так решил, или просто попиарил? ;) Некоторые подробности здесь и здесь . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 19:37 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Flying Dutchman, Вау! Агромное спасибо, +5 Вам в Карму. Всё стало на свои места. Особенный респект за ссылку на описание паттерна. Все-таки MUMPS рулит. Пошел разворачивать дистриб повторно и вникать тщательнее. P.S. Ваше решение на реляционных таблицах - мне полностью понятно, у самого примерно такое же есть как тестовый пример, о чем здесь уже указывал. Просто не знал что это "паттерн". Оно хорошо для инет-магазина, но совершенно не канает для моей задачи. Кстати, метаданные можно хранить в сильно урезанном виде, если иметь доступ к описанию метаданных самой СУБД. Я большую часть описаний выгребал из метатаблиц Мускуля... какой там тип, кто и с кем связан... Попробуйте в Вашей структуре завести вложенные ссылки на товары или рубрики как варианты значений параметров. Например, как описывал во втором примере с фотокамерой. То есть, необходимо по полученной первичной выборке рекурсивно обращаться в базу за уточнением (потому что "объект") да ещё и несколько раз по все расширяющемуся списку критериев. Даже имея динамический SQL - ваша база - ляжет. Про Мускул с его prepare/execute - я ваще молчу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2011, 16:26 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
+1 за MongoDb довольно шустрая мы используем шардинг товаров в MySQL ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 18:29 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Задача вполне себе для реляционной БД, зачем тут иерархические - не совсем понятно. Просто не стоит по опыту работы с MySQL судить о реляционных БД вообще. Данных мало, структуры простые, нагрузка не указана, но, судя по всему, не большая - так в чем проблема? А что за задача целиком, какая ваша роль в проекте? Если задача "сделать себя незаменимым", то и MUMPS и прочий NoSQL вполне подходят. Если же нужно просто сделать работающее решение, то лучше реляционку. Кроме требований по производительности - какие еще требования? Надежность, безопасность, масштабируемость? Сколько стоит простой системы? Кто ее будет администрировать? Я бы, скорее всего, делал бы на DB2, с годовой поддержкой. Если уже есть какой-то DBA и какие-то нормальные БД - то на них. Чудес не бывает, все равно если данные не в кэше - то их нужно читать с диска. Индексы тут вполне помогают, с деревьями все нормальные БД работают без особых проблем - так что не понятно, а зачем NoSQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 18:30 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
DPH3, возможно Вы правы. К сожалению у меня практический опыт работы в БД это: Foxpro (DOS), Clipper (там же и очень немножко), Access 97 (много и долго несколько проектов в т.ч. развесистая СРМ на более 150 таблиц с журналированием, складом и бухучетом), Paradox 4.5 DOS и MySQl с 5.1, ну ещё небольшие правки готовой БД на Interbase (изучать пришлось на ходу по мере правок). Очень немножко смотрел Mumps, но больше в сторону исходников - пытался понять как движок работает с блоками данных и можно ли его "встроить куда-либо отдельно". То есть с коммерческими базами типа Оракула или поделок от мелкософта - понятно не работал. Был когда-то приобретен платный офис с акссесс, вот с ним и игрался долгое время. :) Задача, не коммерческая (по крайней мере пока), поэтому смотрю только в сторону бесплатных вариантов. А поскольку мои старые лицензированные 98 окошки уже давненько не поддерживаются, то перешел на Линукс. В "общем виде" задача как раз и формулируется очень кратко "построить базу всего" :) Если подробнее, то особенности писал выше: строим понятие "строка прайса", собирая его из отдельных параметров, начиная с наименования товара: "фотоаппарат" + "объектив" + "светосила" + "от" 2.8 + "до" 11 + "цена" + "оптовая" + "на 01/01/2001" + 1 + "рубль". То есть в самой БД есть только зависимости: "фотоаппарат" - "объектив", "объектив" - "светосила"... , причем элемент зависимости может быть: конкретным значением, диапазоном значений, ...; параметром (с допустимым набором значений - у каждого параметра - свой набор) типа "светосила", "цена", ...; произвольным товаром - например для параметра "состоит из" или "комплектность", ... ; группой товаров (например для параметра "материал", "сделано из") ... Архитектурно, всё просто... но пробная версия на мускуле - ложится при первом же уровне рекурсии... а их частенько поболее... 3-5 - это нормально: фотоаппарат марки "sx120is" имеет в комплектности объектив, который состоит из 11 линз, одна из которых имеет значение параметра "материал" = "пластмассовая". Это не позволяет добавить такой товар в выборку по запросу "найти все фотокамеры со стеклянными линзами". И "докопаться" до этого вывода можно только пройдя все рекурсии в описаниях. :( Или, в версии на Аксесс решалась такая задача: Материнка имеет параметр "socket" со значением - "s-478". При выборе такой материнки, для списка допустимых процессоров надо было выбрать только те, которые имеют аналогичное значение такого же параметра. Это было в основе интерфейса для сборки компов "девочками-продавцами", которые легко надували щеки а-ля "эксперт". :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 22:26 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
akalend+1 за MongoDb довольно шустрая мы используем шардинг товаров в MySQL Бегло ознакомился с туториалом. Прикольно. Многое решается за счет архитектуры этой СУБД. Но вот что смутило: 1. Формат хранения json: насколько это приемлемо по скорости "распознавания" в выборках? 2. Вычисления над числовыми типами. Например оценка попадания в диапазон "от..до", или приведение зависимых единиц измерений (граммы в градусы :) ) при выборках. Ну например есть типовое значение "мешок" == 50кг. Например товар "гречка в мешках, на складе 100шт." Справится ли оно "на лету" с поиском по условию "найти гречку в объеме 3тн"? Может быть есть какое-то описание по "нагрузочным" характеристикам в реальных проектах? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.04.2011, 22:53 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
какой объем данных? на 200 тысячах документов просто летает на простом ноуте по сравнению с ms sql, плюс потребляет на порядок меньш ересурсов. На форумах меряются 50миллионными базами (не на одном сервере, конечно). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2011, 01:06 |
|
Какую БД выбрать для товарной базы?
|
|||
---|---|---|---|
#18+
Arhat109Бегло ознакомился с туториалом. Прикольно. Многое решается за счет архитектуры этой СУБД. Но вот что смутило: 1. Формат хранения json: насколько это приемлемо по скорости "распознавания" в выборках? вполне нормально справляется - если уж не слишком заумный JSON Arhat1092. Вычисления над числовыми типами. Например оценка попадания в диапазон "от..до", или приведение зависимых единиц измерений (граммы в градусы :) ) при выборках. Ну например есть типовое значение "мешок" == 50кг. Например товар "гречка в мешках, на складе 100шт." Справится ли оно "на лету" с поиском по условию "найти гречку в объеме 3тн"? Может быть есть какое-то описание по "нагрузочным" характеристикам в реальных проектах? по нагрузкам в реальных проектах - шустрее мускуля в 1.5 а тои два раза если используем поиск - то используем Сфинкс, данные из МонгоДб выгружаем в ХМЛ и этот ХМЛ используем уже как источник данных для поиска. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.04.2011, 14:44 |
|
|
start [/forum/topic.php?fid=48&msg=37209275&tid=1857013]: |
0ms |
get settings: |
19ms |
get forum list: |
17ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
104ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
555ms |
get tp. blocked users: |
0ms |
others: | 378ms |
total: | 1082ms |
0 / 0 |