Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Буду ли я прав применив один sequence? / 16 сообщений из 16, страница 1 из 1
26.11.2007, 10:45
    #34964415
Буду ли я прав применив один sequence?
Допустим имеется порядка 100-150 табличек в базе данных.
Допустим я хочу держать один sequence для генерации значения PK этих табличек.
А теперь по существу, буду ли я прав в своем подходе?
...
Рейтинг: 0 / 0
26.11.2007, 11:47
    #34964609
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
Если ключи типа int4, а таблицы будут большие, то может банально не хватить значений ключа.
А в остальном, ИМХО, в таком подходе проблем не вижу.
Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
26.11.2007, 11:50
    #34964615
tadmin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
IMHO
чисто теоретически, использование одного sequence менее производительно, поскольку получение nextvalue не конкурентное, а ставится в очередь.
Одна sequence очень быстр, едва ли это будет заметно даже на очень активных вставках
...
Рейтинг: 0 / 0
26.11.2007, 11:55
    #34964627
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
tadminIMHO
чисто теоретически, использование одного sequence менее производительно, поскольку получение nextvalue не конкурентное, а ставится в очередь.
Одна sequence очень быстр, едва ли это будет заметно даже на очень активных вставках
для этого есть
CREATE SEQUENCE
...
The optional clause CACHE cache specifies how many sequence numbers are to be preallocated and stored in memory for faster access. The minimum value is 1 (only one value can be generated at a time, i.e., no cache), and this is also the default.
...
...
Рейтинг: 0 / 0
26.11.2007, 12:04
    #34964664
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
Извечный вопрос. С точки зрения... базы - никаких проблем. А с точки зрения логики - приятнее (именно приятнее) чтобы каждый объект имел свою последовательность. Объяснить не смогу, просто приятнее :)
Да и зачем такая заморочка?
...
Рейтинг: 0 / 0
26.11.2007, 12:26
    #34964738
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
К сожалению, Postgres'овский CACHE для sequence реализован не так, как бы хотелось. Этот cache живет только в пределах сессии.
Если, например, вы поставили CACHE 500, и потом 3 раза соединились с БД вызвали по разу sequence и отсоединились, то при следующем коннекте sequence вам выдаст уже 1501.
...
Рейтинг: 0 / 0
26.11.2007, 12:30
    #34964757
tadmin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
pamirИзвечный вопрос. С точки зрения... базы - никаких проблем. А с точки зрения логики - приятнее (именно приятнее) чтобы каждый объект имел свою последовательность. Объяснить не смогу, просто приятнее :)
Да и зачем такая заморочка?
Ну, с точки зрения приятности тоже могут быть доводы:
- строим объектную модель, по id объекта всегда знаем его тип.
- массовое восстановление данных в таблицах (частичный backup-restore) можно сделать сделав выкл./вкл. всего одного сиквенса.

Но, опять таки, это не подавляющие и очень частные удобства.
...
Рейтинг: 0 / 0
26.11.2007, 12:34
    #34964776
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
ThamerlanК сожалению, Postgres'овский CACHE для sequence реализован не так, как бы хотелось. Этот cache живет только в пределах сессии.
Если, например, вы поставили CACHE 500, и потом 3 раза соединились с БД вызвали по разу sequence и отсоединились, то при следующем коннекте sequence вам выдаст уже 1501.
вроде логично все, в оракле аналогично, насколько я знаю
...
Рейтинг: 0 / 0
26.11.2007, 12:46
    #34964844
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
tadmin[quot pamir]Ну, с точки зрения приятности тоже могут быть доводы:
- строим объектную модель, по id объекта всегда знаем его тип.
Как?
...
Рейтинг: 0 / 0
26.11.2007, 12:52
    #34964868
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
st_serg ThamerlanК сожалению, Postgres'овский CACHE для sequence реализован не так, как бы хотелось. Этот cache живет только в пределах сессии.
Если, например, вы поставили CACHE 500, и потом 3 раза соединились с БД вызвали по разу sequence и отсоединились, то при следующем коннекте sequence вам выдаст уже 1501.
вроде логично все, в оракле аналогично, насколько я знаюЕсли все так, как описал Тамерлан, то в оракле все не так. Там есть кэш, но, если я уж совсем не поехал умом, там не бывает такого, что из-за кэша образуются дыры в последовательностях. Да, Оракл не гарантирует, что не будет дыр, но это не из-за кэша, а из-за "нетранзакционности" последовательности - в одной сессии взяли очередной номер, в другой тоже взяли, первая откатилась. Вот и дырка.
...
Рейтинг: 0 / 0
26.11.2007, 12:59
    #34964899
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
st_serg ThamerlanК сожалению, Postgres'овский CACHE для sequence реализован не так, как бы хотелось. Этот cache живет только в пределах сессии.
Если, например, вы поставили CACHE 500, и потом 3 раза соединились с БД вызвали по разу sequence и отсоединились, то при следующем коннекте sequence вам выдаст уже 1501.
вроде логично все, в оракле аналогично, насколько я знаю

В Oracle sequences кешируются глобально и не зависят от соединений, и потеряться кэш может только от рестатра базы или от flush'а.
...
Рейтинг: 0 / 0
26.11.2007, 13:51
    #34965120
Г ос т ь я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
[/quot]

Если что:
Verba volant, scripta manent
...
Рейтинг: 0 / 0
26.11.2007, 14:12
    #34965217
st_serg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
действительно, насчет оракла - это я погорячился )
...
Рейтинг: 0 / 0
26.11.2007, 14:21
    #34965247
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
pamir tadmin[quot pamir]Ну, с точки зрения приятности тоже могут быть доводы:
- строим объектную модель, по id объекта всегда знаем его тип.
Как?наследуем все id-ники от одной "виртуальной" (без данных) таблицы (tid). Выполнее запрос к ней
SELECT tableoid FROM tid WHERE id = _id;
вернет нам табличку реального хранения, т.е. "тип" объекта.
...
Рейтинг: 0 / 0
26.11.2007, 14:27
    #34965270
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
assa pamir tadmin[quot pamir]Ну, с точки зрения приятности тоже могут быть доводы:
- строим объектную модель, по id объекта всегда знаем его тип.
Как?наследуем все id-ники от одной "виртуальной" (без данных) таблицы (tid). Выполнее запрос к ней
SELECT tableoid FROM tid WHERE id = _id;
вернет нам табличку реального хранения, т.е. "тип" объекта.Здорово. Не учел эффекта наследования (все-таки оракл для меня роднее, а там такого нет)
...
Рейтинг: 0 / 0
06.12.2007, 15:22
    #34991484
kamerad1981
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Буду ли я прав применив один sequence?
Имеет смысл для хранения похожих сущностей, но для этого действительно лучше наследование применять. Могут быть проблемы в БД где идентификатор имеет смысл не только для БД.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Буду ли я прав применив один sequence? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]