Трябва ли да използвам bigserial на Postgres за записи в ново приложение?

Работя върху ново приложение, което съхранява своите данни в база данни на PostgreSQL. Видът данни, наред с други неща, са записи на измервателни уреди от някои измервателни устройства. Може да има стотици и хиляди от тези устройства на клиент и всички обикновено предоставят малко записи на ден. По-новите записи заменят по-старите, като просто изтриват по-старите и се вмъкват като нови записи с нови идентификатори. Това, което моята компания не знае, е колко клиенти с колко измервателни устройства и записи на ден наистина ще трябва да съхраняваме.

Тъй като това е ново приложение, бих искал да помоля за съвет относно използването на serial срещу bigserial като ID за записите на измервателния уред. Има ли някакво забележимо понижаване на производителността на настоящите процесори x64 или подобни? Съхранението за ID полето трябва да се увеличи с коефициент 2, нали? Някакви очевидни причини защо да не използвате bigserial?

Благодаря!


person Thorsten Schöning    schedule 27.08.2014    source източник


Отговори (2)


Що се отнася до производителността, няма разлика - ако приемем, че PostgreSQL е правилно компилиран, за да се възползва от платформата x86_64. Например добавянето на две 32-битови int отнема същото време като добавянето на 64-bit int. Въпреки това, ако е компилиран за обикновен x86 (32-битов), ще има известен (незначителен?) спад в производителността, защото по някакъв начин трябва да емулира 64-битова аритметика, използвайки само 32-битови регистри.

С две думи: уверете се, че използвате 64-битова версия на PostgreSQL и трябва да сте готови!

person Piotr Miś    schedule 27.08.2014
comment
Едно допълнително интересно твърдение, което не разпознах преди в документите за CREATE SEQUENCE: Последователностите са базирани на bigint аритметика[...]На някои по-стари платформи[...]последователностите използват обикновена целочислена аритметика[...] Така че 32 бита целите числа така или иначе наистина изглеждат като някакво наследство. - person Thorsten Schöning; 28.08.2014

Няма значителни проблеми с производителността с bigserial тип данни като последователност и първичен ключ на таблица. За подробности прочетете документация и по-стар въпрос относно темата.

Между другото: ако имате 10 000 устройства и всяко устройство произвежда 10 записа на ден, цяло число е достатъчно за 60 години, така че мисля, че цяло число е достатъчно ;-)

person 1ac0    schedule 27.08.2014
comment
Защо просто не използвате 64-битово цяло число и сте в безопасност за векове? :) Единствената цена, която плащате, е малко памет, която и без това е евтина. - person Piotr Miś; 27.08.2014
comment
@uraf прав си, паметта е евтина, но ssd дисковете в момента не са ;-) - person 1ac0; 27.08.2014
comment
Не са само тези 10 записа на ден, помислих си особено за пропуските поради отменени транзакции по време на грешки и други подобни. Разбира се, това изобщо не трябва да се случва често... Това е просто инстинкт. :-) - person Thorsten Schöning; 28.08.2014