Тъй като количеството данни на типичната компания нараства експоненциално, става още по-критично за оптимизиране на съхранението на данни. Размерът на вашите данни не само оказва влияние върху размера и разходите за съхранение, но също така влияе върху ефективността на заявката. Ключов фактор при определянето на размера на вашите данни е избраният от вас тип данни. Този урок ще обясни как да изберете правилните типове данни.
Какво представляват типовете данни?
Типове данни дефинирайте какъв вид и обхват от данни могат да се съхраняват в дадено поле (или колона).
Помислете за таблица за продажби с тези примерни записи:
Всяко поле има свой собствен тип и диапазон от стойности:
време_за_покупка :дата и час на продажбаsale_id :целочислени стойности, нарастващи с едно за всяка нова продажбаcustomer_id :целочислени стойности, нарастващи с едно за всеки нов клиентвалута :текст винаги в 3-знаковия код на валутатаamount_paid :парични реални числови стойности между $0,00 и $1,000,00устройство :текст, където стойностите могат да бъдат:„desktop“, „mobile app“ и „mobile web“has_discount :булев, където записите могат да бъдат TRUE
или FALSE
бележки :текст, където записът може да бъде толкова дълъг, колкото е позволено в нашия инструмент за въвеждане на агент (250 знака)
Видът на данните (цели числа, текст, реални числа и т.н...) и възможните стойности (от 0 до 1000; произволни 3 знака и т.н.) съответстват на конкретни типове данни на базата данни .
Какви са възможните типове данни?
Различните бази данни имат различни типове данни, но повечето се вписват в следните категории:
Числово:
- цели числа :за числа без дроби. Може да бъде със знак (позволява положителни и отрицателни стойности) или без знак (позволява само положителни числа). Обикновено се използва за полета за идентификация и преброяване на нещо
- десетична(x,y) :за числа с дроби, изискващи точна точност. Може да бъде със знак (позволява положителни и отрицателни стойности) или без знак (позволява само положителни числа). Обикновено се използва за парични полета. Потребителят посочва общия разрешен брой значими цифри (x) и след десетичната запетая (y) в скоби
- поплавък / удвояване :за числа с дроби, които не изискват точна точност. Може да бъде със знак (позволява положителни и отрицателни стойности) или без знак (позволява само положителни числа). Обикновено се използва за всички реални числа, с изключение на паричните полета
Дата/час:
дата :за стойности на дата
- време :за времеви стойности
- клеймо за време / дата и час :за стойности на дата и час
Текст:
- знак(n) :за низове от знаци с фиксирана дължина, където стойността в скобите диктува фиксирания размер на всеки запис
- varchar(n) :за низове от знаци с променлива дължина, където стойността в скобите диктува максималния приет размер на всеки запис
Булев:
- булева :за булеви (true/false) стойности. Някои бази данни (като MySQL) нямат булев тип данни и вместо това преобразуват булеви стойности в цели числа (1=TRUE, 0 =FALSE)
Повечето бази данни предлагат вариации на размера за всеки тип. Например MySQL предоставя следните възможни целочислени типове данни:
Как да изберете правилните типове данни
Основната стратегия за избор на най-добрия тип данни е да изберете най-малкия тип данни, който съответства на типа данни, който имате, и който позволява всички възможни стойности на вашите данни.
Например customer_id
в нашата примерна таблица за продажби е цяло число, започващо с 0. Днес нашата измислена компания има само 15 000 клиенти. Използвайки таблицата с целочислени типове данни на MySQL от предишния раздел, може да се изкушим да изберем SMALLINT
unsigned като тип данни, тъй като това е най-малкият тип данни, който ще приеме нашите текущи цели числа от 0 до 15 000. Очакваме обаче да достигнем до 100 000 клиенти през следващите 6-12 месеца. Когато преминем над 65 535, SMALLINT
вече няма да е достатъчно. Следователно, по-добър избор е MEDIUMINT
неподписан, което трябва да ни покрие през следващите няколко години.
Можете да позволите на вашата база данни да избира типове данни вместо вас, когато създавате вашата таблица с примерни записи. Това обаче рядко ще ви даде най-добрия избор на тип данни. Например, оставянето на MySQL да избере типовете данни за таблица за продажби с показаните по-рано примерни стойности дава няколко проблема.
Проблемите, които срещаме с автоматично избраните типове данни от MySQL са:
- грешен тип данни :няма да можете да използвате полето по начина, по който бихте очаквали. Например, като имате
purchase_time
като низ, а не тип данни за време, означава, че няма да можете да извършвате времеви операции (като например изчисляване на колко време е минало от покупката) на полето - твърде ограничен :MySQL ще даде грешки, когато се опитате да въведете стойности, които са по-големи от това, което позволява типът данни. Например, ще получим грешки, ако имаме разпродажба със сума_платена от $100,00 или повече или agent_comment, който е по-дълъг от 65 знака
- твърде консервативен :макар че нищо няма да се счупи от прекалено консервативно отношение към типовете данни, ще губите място за съхранение. С нашите примерни данни бихме могли да спестим 15% от хранилището, като използваме по-малко консервативните предпочитани опции
Колкото и умни да са съвременните бази данни, собствениците на данните все още знаят най-добре какъв вид данни се съхраняват и какви са възможните стойности, които данните могат да приемат в обозримо бъдеще. Така че трябва внимателно да посочите типовете данни за всяко от вашите полета.
Тук е предоставена документация за типове данни за различни общи бази данни:
- MySQL
- Червено изместване на Amazon
- Apache Hive
- Терадата
Заключение
За да може вашата база данни да функционира правилно и да бъде възможно най-оптимизирана, важно е внимателно да изберете типовете данни за всяко поле във вашите таблици.