Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Тут уже много копьев наломали паралельно, но у меня вопросик несколько другой. Есть некая публичная база данных. Не реляционная - просто текстовый файл. Но она пользуется некими своими внутренними ID для связей. Ну например есть такая, называется GenBank - база молекул. Там собственно описание сих молекул, их разработчиков, статей в журналах, описание участков молекулы и прочая байда. Кажная молекула имеет свой GI - уникальный нумер. Его уникальность поддерживают те, кто собственно поддерживает и сам GenBank. Итак, я хочу иметь у себя сие под рукой в моей RDBMS, например в Oracle. Ну и начинаю лепить таблички. Так вот вопрос, можно ли мне использовать сей GI для внутренних связей между этими таблицами, или надо генерить свой собственный ID для этих нужд? И небольщое пояснение. Я буду пользовать мою базу только как read-only - там менять нечего. Время от времени GenBank меняют, ессесвенно (наука вперед идет, однако!). Так я его весь опять скачаю и полностью перегружу. Тоесть удалю все что есть в моих таблицах и загружу заново. Так и быстрее будет - там 40M молекул, однако - и некоторые таблички на 200-300M могут потянуть, описание участков к примеру. В данном аспекте генерация собственного ID ключа мне кажется нецелесообразным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2005, 20:55 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
А фиг знает. Если своих табличек пара тысяч, так может лучше свой генерить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 00:16 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Я бы посмотрел на проблему следующим образом: пока ты собираешься использовать базу только read-only - можно и так и так, что лучше - трудно сказать. Однако если вдруг ты захочешь таки в свою базу что-то писать в какие-то свои дополнительные таблицы, то остается только вариант с GI, так как иначе при перезагрузке данных теряешь связи со "своей" таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 05:03 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Своих табличек 5-6 =). На 2000 еще оч.постараться надо. Данные "public" и меняться могут только провайдерами этой базы. Я перегружаю у себя все с нуля. У меня конечно есть и свои таблицы, но они имеют линки только через определенные поля (типа того же GI) к "public" объектам. Это нормальная логика. Пропадет public объект, пропадет и связь - все в пределах правил. Нужно ли городить свои ID для связи между public объектами? На мой взгляд нет. Они и так хорошо связаны, и за это отвечает провайдер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 06:07 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Так и используйте GI как ID. И реляции на нём можно свободно построить. А излишние ID в данном конкретном случае городить - это от лукавого :-) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 08:44 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
До тех пор, пока Вы собираетесь иметь точную копию той базы, лепить собственные ID незачем. Может быть, незачем даже лепить таблички - подключить файлы через external table и наслаждаться :) Как только Вы захотите что-то еще - к примеру, сделать свою табличку, ссылающуюся на эти - свои ключи могут понадобиться. Если вероятность этого невелика - думаю, сейчас закладываться незачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 11:18 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Ну через external table это будет тяп-ляп... Зачем такую, извиняюсь, хрень советовать? Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 14:18 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Va1entin Ну через external table это будет тяп-ляп... Зачем такую, извиняюсь, хрень советовать? Насколько я понимаю, Вы обладаете полной информацией о базе и предполагаемых условиях ее использования. Чтобы закрыть вопрос - предлагаю Вам помедитировать над ситуацией, когда данные в файлах изменяются куда чаще, чем автор делает запрос к ним из своей базы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 17:59 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Я тоже к такому мнению прихожу - лепить лишних ключей не надо. Теперь о своих табличках. Там сложнее. Это уже продукты и они используют публичную информацию. Есть нека табличка PRODUCT где перечислены основные параметры, общие для всех продуктов (внутренне имя, SKU, дата выпуска, проча байда). Сия таблица имеет свой PK PROD_ID, который генериться сиквенсом. И есть куча других табличек по одной (пока) на кажный тип продукта (ORF, LUX, RNAI, проча непонятная байда). Причем кажный продукт имеет свой собсвенный ORF_ID, LUX_ID, RNAI_ID (дт), который может быть либо строчкой, либо числом, который ессевенно уникален, но рожден вне моей базы. Уникальность и незыблемость этих ключей гарантирована на долгое время и если что-то вдруг там поменяють - не мне одному расхлебывать (вероятность сего ничтожно мала...). Так вот, есть два варианта - спор с моим коллегой Делать так Код: plaintext 1. 2. 3. 4. 5. 6. или так Код: plaintext 1. 2. 3. 4. 5. 6. На самом деле разницы никакой в данныx моделях. Спор больше о будушем развитии. Что более понятно? На каки грабли можно наступить в будушем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 18:35 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
andrushokТак вот, есть два варианта - спор с моим коллегой На самом деле между этими вариантами нет абсолютно никакой разницы - в том числе с точки будущего развития. Они абсолютно эквивалентны: в таблице есть два альтернативных ключа, один из которых связывается один к одному с таблицей продуктов. С точки зрения развития может быть задан вопрос - на какой из этих альтернативных ключей ссылаются записи дочерних таблиц (соответственно, сложнее будет менять). Поскольку ссылка может идти на любой из ключей - независимо от того, какой назвать первичным - именно в этом вопросе разницы никакой. А вот на кого из них ссылаться.. Я бы там, где это возможно, использовал бы собственный ключ; он более контролируем. Внешний ключ имеет смысл использовать при массовой загрузке данных из внешних источников; это экономит время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 18:46 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Ну с этим было тоже более менее понятно. Я просто небыл уверен, стоит ли мне настаивать на собственном ключе как PK. Теперь задачка еще сложнее. Итак, есть 2 группы таблиц - продукты и public data. Есть еще всяка хрень типа покупателей, текуших проектов, используемых технологий, производственных процессов, что в данной базе описывается простыми табличками с 3-мя - 4-мя колонками - так, чисто информационные таблички. Кажная, ессесвенно, свое ID имеет (ну куды ж без него!). И вот надо построить некие связи между всей байдой. Тоесть результатом запроса (не SQL =)) будет красивая картинка, показывающая что с чем имеет связь. Например: кто-то купил продукт - одна связь, продукт изготовлен по такой технологии - другая связь, технология описана в открытых источниках - третья связь. Как потроить таблички (одной не обойдешся!) описывающие сию паутину? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 21:31 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
andrushokЯ просто небыл уверен, стоит ли мне настаивать на собственном ключе как PK. Теперь задачка еще сложнее. Итак, есть 2 группы таблиц - продукты и public data...Я все-таки хочу вернуться к исходному вопросу (который про то, стоит ли иметь собственный ключ как PK) и посмотреть на него вот с какой стороны. Кто владеет этим ключем? Не andrushok, а некто посторонний. Если публичная таблица берется один раз, и более не меняется, то это не имеет никакого значения. Но если регулярно выходят новые релизы публичной таблицы, и их планируется обновлять, то как раз вопрос владения и выплывает. Все мы знаем и соблюдаем правила дорожного движения. И знаем, что в этих правилах написано, в частности, что на дороге мы должны предполагать от других участников такого же знания и соблюдения этих правил. Тем не менее, аварии, почему-то, случаются. Так же и в этом случае. Допустим, andrushok доверится разработчику публичной таблицы, так как он считает, что правила реляционной теории так же строги, общеизвестны и обязательны к применению, как ПДД. И он решит использовать в качестве ключа в своих таблицах ключ таблицы публичной. А где гарантия, что тот разработчик, например, в случае удаления записей, не станет использовать удаленный ключ повторно, для идентификации совершенно другой записи? Или вообще, тот ключ, который получает публикуемая таблица, не формируется непосредственно при экспорте из родной системы как простой автонумератор? Нет уж, если ключ внешней по отношению к системе таблицы внедряется в систему, мы косвенно пускаем в нашу систему чужого разработчика. Я в таких случаях предпочитаю действовать крайне осторожно. И даже если у меня со сторонним разработчиком будут заранее провентилированы все аспекты интерфейса подключения к моей системе его таблицы, включая поведение PK, я не буду торопиться использовать его ключ в моей системе. Я его буду перекодировать и проверять на вшивость при каждом выходе нового релиза его таблицы (ну, то есть, при обновлении данных в таблице, подключенной к моей системе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2005, 22:51 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Возвращаясь к первому вопросу. Public база берется как есть. Со всеми ее ошибками. Я даже поймать эти ошибки как правило не могу, а если и поймаю, то не имею никакого права у себя их исправлять, могу только провайдеру этой базы кляузу написать и дождаться следующего релиза. Еще раз повторяю, если в public данных какие-то изменения - я грохаю все и заливаю заново. Никакой информации о предыдущем состоянии не сохраняется. Так быстрее. Тетеритицыски update к этой базе выходят кажный божий день. От 800-900 до 120K-150K объектов за день. Но если эти update кажный день проводить (всего объектов повторяю 40M, а в некоторых таблицах и до 200М-300М записей доходить) то 24 часов маловато будет. Так что проше (да воще иначе никак) раз в месяц базу целиком качнуть (2 суток) и в выходные заново перезалить (2-3 суток). При сем построение внутренних ID может сильно затормозить сей процесс. А так все индексы и ограничения отключил и вперед. Конечно, на этот момент, пользователям база недоступна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 17:49 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
andrushokТетеритицыски update к этой базе выходят кажный божий день. От 800-900 до 120K-150K объектов за день. Хм. А измененные записи помечены? Вроде как нет проблемы залить.. andrushokПри сем построение внутренних ID может сильно затормозить сей процесс. Если на секвенсорах - безусловно затормозит; они для другого. Если сделать собственный простейший автоинкремент - будет пристойно, но непонятно зачем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 18:06 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
А что значит - помечены? Update происходит так - я качаю некий flat файл, обыкновенный, такой, текстовый. Потом напускаю на него парсер и получаю некий список объектов (етих самых 800-150K, как повезет). Кажный объект имеет развесистую структуру и тот самый GI - который уникалет. Далее я должен пробежаться по десятку табличек и пометить те строчки, что надо удалить. Потом вставить новые. Потом запустить некий demon, который будет чикать помеченые строчки в background. Но это уже не важно. Так на предельных значениях (150K) я в 24 не укладываюсь. На самом деле ме и 12 часов критично, так как другие люди тоже работать с этой базой должны. А так - за 2-3 дня перезалил все и живи меса спокойно... Но это так, была така идейка. Для перезаливки тоже свой собственный ID генерить не удобно (про сиквенсы я и не говорю воще). Дело в том, что парсеров запускаем сразу несколько (для ускорения) - получам некие данные и напускаем на него Оракловый SQL loader. Можно конечно все парсеры синхронизировать, или кажному свой регион ID давать - но остается опять вопрос - зачем. База перезаливаетя с нуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2005, 21:47 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
andrushokА что значит - помечены? То и значит - наличие флага "изменено по сравнению с предыдущим состоянием". andrushok.....Потом вставить новые. Потом запустить некий demon, который будет чикать помеченые строчки в background. Но это уже не важно. Так на предельных значениях (150K) я в 24 не укладываюсь. Хм. Это меня удивляет - правда, безусловно, зависит от железа. Но если 150K, десять табличек - это максимум 3.000.000 изменений. Странно, если не укладывается за сутки. Или основное время занимает как раз проверка полного апдейта и поиск измененных данных? Кроме того, вопрос - чем это обновление не дает работать с базой? Несогласованные данные? Часто можно сделать систему буферизации - скажем, обсчитывать изменения только ночью и контролировать время; что не успели - будет ждать следующей ночи (а днем могут быть подкинуты еще обновления в буфер). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 10:40 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
Железо нормальное, но таблички большие, дюже - или это не важно? Может, конечно, что то и не так, но полной перезаливкой получалось быстрее. А про обновление и невозможность работы - 2 причины 1) как Вы заметили - несогласованность данных (они могут быть полностью согласованны только по окончании) 2) на время обновления выключаются constraint и убираются индексы (на public табличках, ессесвенно) - но этого достаточно, чтоб пользователь вылетал по timeout, если хочет что-то найти в public - индексов то нема... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 18:13 |
|
||
|
И снова все о нем (ключи, однако)
|
|||
|---|---|---|---|
|
#18+
andrushokЖелезо нормальное, но таблички большие, дюже - или это не важно? Для обновления по первичному ключу - малозначительно. Хотя дюже большие таблички в любом случае стоит партиционировать. andrushok1) как Вы заметили - несогласованность данных (они могут быть полностью согласованны только по окончании) Возможно ли построить порядок обновления так, чтобы при транзакциях разумных объемов сохранялась согласованность? andrushok2) на время обновления выключаются constraint и убираются индексы При полной перезаливке - само собой. А при заливке относительно скромных изменений в относительно большую таблицу это скорее потеря времени. При партиционировании и использовании локальных индексов можно отключать индекс по частям - но при обновлениях, равномерно распределенных по партициям, это вряд ли имеет смысл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2005, 18:57 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33029479&tid=1545921]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 365ms |

| 0 / 0 |
