Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

46. Теория: модерируемые справочники в БД (Дмитрий Котеров)
Author Message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sat Jan 26, 2008 2:27 am (написано за 11 секунд)
   Post subject: 46. Теория: модерируемые справочники в БД
Reply with quote

В данной статье я попытался описать опыт последних нескольких лет работы над сложной и высоконагруженной системой, к которой предъявляются повышенные требования к "чистоте" и качеству данных. При этом сами данные пополняются не столько администраторами системы, сколько ее пользователями, что входит в серьезное противоречие с требованием "чистоты". Ведь известно, что основная масса пользователей склонна вводить всякий "мусор" в поля, где предполагается наличие качественных данных.

dklab.ru/chicken/nablas/46.html
Back to top
View user's profile Send private message Send e-mail
Valentin Gernovich
Заглянувший



Joined: 28 Jan 2008
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Tue Jan 29, 2008 10:06 am (спустя 3 дня 7 часов 38 минут; написано за 11 минут 26 секунд)
   Post subject:
Reply with quote

Все очень правильно, так и должно быть, а то когда видишь однакласки_ру ..... (нет слов) Меня их справочные таблицы просто убивают. В отличии от "мой круг" :)
Хотел бы добавить что можно ввести еще один уровень чистки мусора и ошибок: автоматический. На основе функции soundex или ru_soundex в зависимости от справочника. Я в некоторых стучах я дополняю справочную таблицу полем soundex в котором держу soundex индекс основного поля справочной таблицы. Это индекс для пользователе формируется автоматически, после изменения основного поля. И потом можно обычным запросом с групировкой по полю soundex найти все совпадения например: Москва и moskva и масКва и т.д. А можно запускать скрипт по крону, и он будет помечать похожие слова. Что иногда трудно заметить глазом "пробегая" по большому списку.

Человеческий фактор, знаете ли... По законам Мерфи ошибка "проявиться" в самом неприличном месте.

Функция soundex php.net/soundex
Функция ru_soundex www.buricuj.info/2007/08/28/ru_soundex/
Back to top
View user's profile Send private message
Trurl
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Feb 05, 2008 4:26 am (спустя 6 дней 18 часов 19 минут; написано за 56 секунд)
   Post subject:
Reply with quote

Спасибо за статью, а то иногда бывает трудно все это сформулировать.
Кстати в "вернуть элемент обратно младшему администратору (is_dirty = 1)." возможно имелось ввиду "(is_dirty = 2)"?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Mar 13, 2008 1:28 am (спустя 1 месяц 7 дней 21 час 1 минуту; написано за 4 минуты 39 секунд)
   Post subject:
Reply with quote

По поводу soundex и неточного соответствия. Данные функции, конечно же, очень полезны. Еще сюда можно добавить триграммы (которые поддерживаются, например, в PostgreSQL - trgm). Однако я считаю, что не нужно это полностью автоматизировать, и неточные совпадения хороши лишь в роли "подсказок" администраторам. Например, когда администратор хочет "склеить" некоторое значение с другим, то варианты этих "других" могут вычисляться как раз с помощью данных функций. Если действовать автоматически, очень велик риск ошибки, а ошибки такого рода исправить практически невозможно ("склеить" легко, а вот "расклеить" - невозможно).

И более того: все "склейки" должны также где-то сохраняться и учитываться в будущем, чтобы система могла уже проводить все аналогичные действия автоматически. Например, если администратор склеил "масква" и "москва", то эта пара запомнилась, и в будущем при приходе значения "масква" оно автоматически (или по крону, это не важно) превратится в "москва", а администратору даже ничего не придется делать. В МойКруг подобная техника называется "Dictionary Mapping". Но об этом - в одной из следующих статей.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Mar 13, 2008 1:30 am (спустя 2 минуты; написано за 2 минуты 39 секунд)
   Post subject:
Reply with quote

Да, еще одно: разработка кода и внедрение для данной техники модерируемых справочников в системе, основанной на Propel, занимает порядка 2-3 недель работы хорошего программиста. В это время входит также минимальный администраторский интерфейс (без "склеек"). Т.е. барьер на вход достаточно высок.
Back to top
View user's profile Send private message Send e-mail
Dan__
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Mar 24, 2008 3:59 pm (спустя 11 дней 14 часов 28 минут; написано за 2 минуты 15 секунд)
   Post subject:
Reply with quote

Возможно ламерский вопрос, поэтому заранее извиняюсь, а как насчет таких типов данных, как ENUM? Их использование ускорит работу со справочниками или не принципиально? Например если чистые элементы размещать в определение ENUM'а?
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Mon Apr 28, 2008 11:05 pm (спустя 1 месяц 4 дня 7 часов 5 минут; написано за 2 минуты 11 секунд)
   Post subject:
Reply with quote

Про ENUM могу сказать, что они ничем не отличаются от INTEGER по скорости. К тому же я очень не рекомендую их применять вообще (особенно в MySQL), т.к. ENUM(a), помимо элемента "a", в действительности создает еще 2 значения для поля: "" и NULL. Это очень неудобно на практике. Отдельный справочник плюс внешние ключи на него гораздо предпочтительнее (тем более, что рано или поздно все равно придется делать административный интерфейс, вот тут-то и понадобятся человеческие имена для элементов). Но давайте не будем это тут обсуждать, т.к. для данной статьи это злостный оффтопик.
Back to top
View user's profile Send private message Send e-mail
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Jun 04, 2008 12:35 pm (спустя 1 месяц 5 дней 13 часов 29 минут; написано за 3 минуты 11 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Да, еще одно: разработка кода и внедрение для данной техники модерируемых справочников в системе, основанной на Propel, занимает порядка 2-3 недель работы хорошего программиста. В это время входит также минимальный администраторский интерфейс (без "склеек"). Т.е. барьер на вход достаточно высок.
Ого. Это при полном рабочем дне? 0_о
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML