Являются дата и время MySQL и поля метки времени лучше для приложений PHP затем меткой времени Unix ints?

Я перечитывал по статье, которая показывает некоторую действительно хорошую информацию и сравнивает о том, как хорошо три других MySQL возможности хранения date/time работают.

MySQL DATETIME по сравнению с МЕТКОЙ ВРЕМЕНИ по сравнению с производительностью INT и сравнивающий с MyISAM

При чтении статьи Вы начинаете получать идею, что использование ints является просто отходами, и необходимо вместо этого пойти с типами столбца MySQL Datetime или Timestamp.

Однако к концу статьи он делает еще один тест, не используя функции MySQL, и Вы внезапно видите, что прямой INT 2x с такой скоростью, как две опции MySQL при поиске метками времени Unix.

Таким образом, это внезапно рассветало на мне - понятное дело, что все используют приложения PHP? время ()! Почти каждый php базы приложения их логика прочь Эпохи Unix. Что означает, что большинство запросов для результатов в определенное время начинается на основе времени () и затем преобразовывается для работы с полями MySQL.

Это оставляет меня со следующим:

  1. Метки времени Unix, сохраненные как INT, быстрее, занимают меньше места и работают исходно со временем PHP () базирующиеся вычисления.

  2. Типы MySQL Date больше подходят для операций и логики со стороны MySQL.

  3. В настоящее время обе Метки времени MySQL Unix And только работают до 2037, что означает, что необходимо использовать поле даты и времени для больших дат в будущем.

  4. MySQL управляет как date = NOW() может отстать при использовании репликации, вызывающей противоречивости данных.

Так применяя это к реальной жизни мы видим, что отвечают, что эти результаты, учитывая, что наиболее действительно DBA использовал бы лучший механизм как PostgreSQL - там arny

Однако большинство приложений, которые были бы к уровню использования логики DB, вероятно, пойдет с PostgreSQL. Что означает, что вся остальная часть нас, программисты только используют MySQL для резервуара для хранения для наших данных (Вы знаете, что это верно), который делает хранение полей как маленькое, быстро, UNIX, на который походит INT, это - на самом деле наилучший вариант.

Таким образом, что делает Вас, парни думают?

Метки времени действительно больше подходят для приложений PHP, чем поля даты MySQL?

8
задан Xeoncross 23 July 2010 в 05:05
поделиться

6 ответов

Формат даты MySQL не имеет проблемы 2038 года.

Даты MySQL надежны от 1000 до 9999 года, в то время как временные метки Unix могут испортиться после 2038 или до 1902 года, если только все в вашей системе не 64-битное.

Однако, если вы используете PHP, это может оказаться спорным: PHP использует временные метки Unix для дат и времени в большинстве своих функций даты и времени, и если вы не используете 64-битную сборку, у него будет такое же ограничение.

Вы будете использовать тип поля, который был предназначен для этой цели.

Если вам это интересно. Помещение даты в поле INT в качестве временной метки unix не так самоописательно; вы не сможете посмотреть на данные, не преобразовав их соответствующим образом. Но для вас это может не иметь никакого значения.

Обратная сторона этого, учитывая, что вы используете PHP, заключается в том, что после того, как вы получите время в PHP, вам все равно придется преобразовать его обратно в временную метку Unix, чтобы сделать с ним что-нибудь полезное, потому что для PHP временные метки Unix являются родными.

Редактировать:

Когда я писал этот ответ, я не использовал класс DateTime в PHP. Использование класса DateTime устраняет необходимость использования временных меток Unix и снимает проблемы 32-/64-битной версии. Спасибо комментарию Чарльза ниже за то, что он указал на хороший способ использования этого класса.

9
ответ дан 5 December 2019 в 12:54
поделиться

Я всегда предпочитаю хранить даты в формате mySQL, так как это упрощает сравнение в запросах. mySQL также имеет несколько отличных опций форматирования дат: http://www.dan.co.uk/mysql-date-format/

Извините, я должен добавить, что я действительно не знаю, какой из них более эффективен с точки зрения скорости, что было важной частью вашего вопроса.

1
ответ дан 5 December 2019 в 12:54
поделиться

Мне нравится держать всю логику в одном, высокоуровневом домене (это приложение, написанное на php). MySQL - это резервуар для хранения данных, каким он и должен оставаться. Я предпочитаю использовать такой класс, как http://www.symfony-project.org/plugins/sfDateTime2Plugin, а затем ->dump() или ->get() в соответствующий формат в любом случае. Гораздо быстрее и проще писать (и расширять) высокоуровневые манипуляции в прикладной области, чем использовать статический интерфейс mysql.

Интерфейс PostgreSQL чище, чем у MySQL. Но мы все еще говорим здесь о MySQL, потому что он популярен. Что приводит к важному соображению. При написании кода или проектировании систем часто имеет смысл придерживаться общепринятых правил, даже если они менее эффективны с вычислительной точки зрения, чем другие, менее известные варианты. Это важно, потому что в этом случае отдается предпочтение другому виду эффективности - читабельности для других. Часто неэффективность читабельности и понятности приводит к большим расходам на бизнес (и времени), чем неэффективность вычислений.

Тем не менее, я за то, чтобы попробовать INTs. Пожалуйста, попробуйте и напишите о своих результатах.

Будьте здоровы

1
ответ дан 5 December 2019 в 12:54
поделиться

Использование различных форматов времени и даты MySQL позволяет выполнять запросы, которые было бы сложно использовать с использованием временных меток Unix.

Примером может служить фильтрация данных на основе определенной недели (номера недели) или использование значения в базе данных после добавления или удаления из нее определенного временного интервала.

MySQL имеет несколько отличных функций для обработки времени и даты , которые хорошо работают с форматами даты, даты, времени и времени.

Мы используем PHP / MySQL для большинства наших сайтов, и мы автоматизируем базу данных для создания объектов PHP, код для перехода с форматов PHP на MySQL очень прост:

if($parameter->Type() == DatabaseType::DATETIME)
    $parameterValueArray[] = date('Y-m-d H:i:s', $parameter->Value());
elseif($parameter->Type() == DatabaseType::DATE)
    $parameterValueArray[] = date('Y-m-d', $parameter->Value());
elseif($parameter->Type() == DatabaseType::TIME)
    $parameterValueArray[] = date('H:i:s', $parameter->Value());

MySQL на PHP:

strtotime () для дата и время mktime () для времени и даты

1
ответ дан 5 December 2019 в 12:54
поделиться

Хороший и открытый вопрос. Я вижу, что вы перфекционист. Я тоже.

Но как и почти все в программировании и жизни, это зависит от того, как это будет соответствовать вашей проблеме.

Если производительность действительно критична, вам следует использовать временные метки UNIX.

Но я действительно не думаю, что это тот случай. Я объясню вам почему. Потому что я разделяю ту же точку зрения, что и Расмус Лердорф. PHP - это язык сценариев, который предоставляет множество возможностей для малого и среднего бизнеса.

Для действительно важных/больших приложений, где масштабируемость и производительность действительно важны, вы не должны использовать PHP + MySQL вообще.

Java или C++ - лучшие решения. Я думаю, что большинство ребят здесь спросят: "Что не так с PHP, ублюдок?!". На самом деле, много чего. Я некоторое время работал тестировщиком производительности, и я говорю, что разработчики должны помнить, что ваш любимый язык не всегда является лучшим решением для каждой проблемы.

Позвольте мне привести пример. Критическое математическое/физическое приложение. Просто нужно число для анализа явления. Вы можете сделать это на Shell Script и на C. C будет работать намного лучше. Видите, выбор наиболее подходящего языка и инструментов для решения вашей задачи - это и есть ответ на ваш правильный ответ.

Давайте вернемся к MySQL, PHP и типам данных. Если вы используете их, я полагаю, что приложение не очень большое и не насыщено бизнес-правилами (если оно такое большое, вы бы рассмотрели некоторые компилируемые языки, а если оно настолько критично, вам стоит рассмотреть возможность использования PostgreSQL или Oracle).

И в этом случае важна скорость создания приложения. В этом случае, я думаю, хорошим способом начать будет основание полей формы на метаданных базы данных. Это поможет вам автоматизировать создание форм. И в этом случае я рекомендую использовать родные типы баз данных.

1
ответ дан 5 December 2019 в 12:54
поделиться

Если вы используете INT вместо DATETIME, вы теряете гибкость в GROUP по дате, часу или времени, делаете различные манипуляции с интервалами.

Вы можете сделать это с INT, используя функцию FROM_UNIXTIME, но ваш запрос будет нечитабельным.

Использование INT вместо DATE удорожает программирование в 3 раза по сравнению с работой с DATE. Время безопасного выполнения недостаточно, чтобы покрыть затраты на программирование. Аппаратное обеспечение обходится дешевле, чем сложное программирование.

Однажды мы совершили эту ошибку и хранили дату в INT. Через полгода мы решили сделать огнеупорными около 30 сайтов для простоты обслуживания.

0
ответ дан 5 December 2019 в 12:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: