TL;DR:Низовете вероятно са по-безопасни избор и разликата в производителността трябва да е незначителна. Целите числа имат смисъл за огромни колекции, където enum трябва да бъде индексирано. YMMV.
Вярно.
Според мен това е ключово предимство на целите числа. Но също така изисква да се уверите, че свързаните стойности на enum
не се променяй. Ако го прецакате, почти сигурно ще предизвикате хаос , което е огромен недостатък.
Ако всъщност използвате тип данни enum, това вероятно е някакво вътрешно число, така че цялото число трябва да изисква по-малко обработка. Така или иначе, тези разходи трябва да са незначителни.
Повтарям много от казаното, но може би това ще помогне на други читатели. Обобщавайки:
- Смесването на картата на стойността на enum всява хаос. Представете си вашия
Declined
състоянията внезапно се интерпретират катоAccepted
, защотоDeclined
имаше стойност '2' и сега еAccepted
защото сте пренаредили enum и сте забравили да присвоите стойности ръчно... (тръпне ) - Низовете са по-изразителни
- Целите числа заемат по-малко място. Дисковото пространство обикновено няма значение, но индексното пространство ще изяде RAM, което е скъпо.
- Целочислените актуализации не преоразмеряват обекта. Низовете, ако техните дължини варират значително, може да изискват преразпределение. Подпълването на низове и коефициентът на подпълване обаче трябва да облекчат това.
- Цели числа могат да бъдат флагове (все още не подлежат на запитване (все още), за съжаление вижте SERVER-3518 )
- Целите числа могат да бъдат заявени чрез
$gt
/$lt
така че можете ефективно да внедрите сложни$or
заявки, въпреки че това е доста тайнствено изискване и няма нищо лошо в$or
запитвания...