Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var a = 0;
var b = [0];
var c = "";
console.log(a == b); // true
console.log(b == c); // false
console.log(c == a); // truevar_dump(!!0); // false
var_dump(!!'Sean'); // true
var_dump(0 == 'Sean'); // true... wtf?
var_dump(false == true); // false
var_dump((bool) 0); // false
var_dump((bool) 'Sean'); // true
var_dump(0 == 'Sean'); // true... wtf?
var_dump(false == true); // false
var_dump((bool) 0 == (bool) 'Sean'); // false
var_dump((int)'Sean');
int(0)
fileno().Просто скажите наркотикам MyISAM нет, все её проблемы не стоят каких-то скромных бонусов в производительности.
Important
Do not convert MySQL system tables in the mysql database (such as user or host) to the InnoDB type. This is an unsupported operation. The system tables must always be of the MyISAM type.
mysql> select table_name, table_type FROM information_schema.tables where engine = 'InnoDB';
+----------------------+------------+
| table_name | table_type |
+----------------------+------------+
| innodb_index_stats | BASE TABLE |
| innodb_table_stats | BASE TABLE |
| slave_master_info | BASE TABLE |
| slave_relay_log_info | BASE TABLE |
| slave_worker_info | BASE TABLE |
mysql> select table_name, table_type FROM information_schema.tables where engine = 'MyISAM';
+---------------------------+-------------+
| table_name | table_type |
+---------------------------+-------------+
| COLUMNS | SYSTEM VIEW |
| EVENTS | SYSTEM VIEW |
| OPTIMIZER_TRACE | SYSTEM VIEW |
| PARAMETERS | SYSTEM VIEW |
| PARTITIONS | SYSTEM VIEW |
| PLUGINS | SYSTEM VIEW |
| PROCESSLIST | SYSTEM VIEW |
| ROUTINES | SYSTEM VIEW |
| TRIGGERS | SYSTEM VIEW |
| VIEWS | SYSTEM VIEW |
| columns_priv | BASE TABLE |
| db | BASE TABLE |
| event | BASE TABLE |
| func | BASE TABLE |
| help_category | BASE TABLE |
| help_keyword | BASE TABLE |
| help_relation | BASE TABLE |
| help_topic | BASE TABLE |
| ndb_binlog_index | BASE TABLE |
| plugin | BASE TABLE |
| proc | BASE TABLE |
| procs_priv | BASE TABLE |
| proxies_priv | BASE TABLE |
| servers | BASE TABLE |
| tables_priv | BASE TABLE |
| time_zone | BASE TABLE |
| time_zone_leap_second | BASE TABLE |
| time_zone_name | BASE TABLE |
| time_zone_transition | BASE TABLE |
| time_zone_transition_type | BASE TABLE |
| user | BASE TABLE |
+---------------------------+-------------+
31 rows in set (0,04 sec)
mysql> select table_name, table_type FROM information_schema.tables where engine = 'InnoDB'; +---------------------------+-------------+ | table_name | table_type | +---------------------------+-------------+ | COLUMNS | SYSTEM VIEW | | EVENTS | SYSTEM VIEW | | OPTIMIZER_TRACE | SYSTEM VIEW | | PARAMETERS | SYSTEM VIEW | | PARTITIONS | SYSTEM VIEW | | PLUGINS | SYSTEM VIEW | | PROCESSLIST | SYSTEM VIEW | | ROUTINES | SYSTEM VIEW | | TRIGGERS | SYSTEM VIEW | | VIEWS | SYSTEM VIEW | | engine_cost | BASE TABLE | | gtid_executed | BASE TABLE | | help_category | BASE TABLE | | help_keyword | BASE TABLE | | help_relation | BASE TABLE | | help_topic | BASE TABLE | | innodb_index_stats | BASE TABLE | | innodb_table_stats | BASE TABLE | | plugin | BASE TABLE | | server_cost | BASE TABLE | | servers | BASE TABLE | | slave_master_info | BASE TABLE | | slave_relay_log_info | BASE TABLE | | slave_worker_info | BASE TABLE | | time_zone | BASE TABLE | | time_zone_leap_second | BASE TABLE | | time_zone_name | BASE TABLE | | time_zone_transition | BASE TABLE | | time_zone_transition_type | BASE TABLE | | sys_config | BASE TABLE | | enums | BASE TABLE | | strings | BASE TABLE | +---------------------------+-------------+ 32 rows in set (0.01 sec) mysql> select table_name, table_type FROM information_schema.tables where engine = 'MyISAM'; +------------------+------------+ | table_name | table_type | +------------------+------------+ | columns_priv | BASE TABLE | | db | BASE TABLE | | event | BASE TABLE | | func | BASE TABLE | | ndb_binlog_index | BASE TABLE | | proc | BASE TABLE | | procs_priv | BASE TABLE | | proxies_priv | BASE TABLE | | tables_priv | BASE TABLE | | user | BASE TABLE | +------------------+------------+ 10 rows in set (0.01 sec)
отсюда куча внутреннего бекграунда, который на вас «выливают» и просят сконфигурить для себя (автовакуум, пухнущие индексы)
Проблема тут скорее архитектурная. Добрые молодцы в PostgreSQL придумали версионность через неизменение старых картежей
Почему нельзя было скрыть механизм чистки старых кортежей?
В оракле (и в mysql InnoDB) тоже есть UNDO логи, которые как-то там чистятся.
Исходим из требования, что нам важнее более предсказуемое время выполнения, чем как можно более быстрый ответ.
Какой ещё разумный способ, кроме как чистки самой транзакцией, можно предложить?
Увы, но для такого поведения нужно либо неограниченное дисковое пространство, либо какой-то сборщик мусора, который сложно представить, не мешающим выполняемым сейчас транзакциям, если база должна быть доступна постоянно
Воот, они как-то там чистятся, и я уверен, что разработчики об этом подумали
Не вижу ничего, чтобы мешало PG чистить такие данные при коммите транзакции
При коммите КАКОЙ транзакции и чего чистить? Если в базе идут одновременно много транзакций, то до тех пор пока не закончатся все те, что пересеклись по времени с данной транзакцией, нельзя в общем случае ничего чистить.
для старых тоже, исключая если что SERIALIZABLE изоляцию
в худшем случае ждем завершения текущих транзакций и удаляем А
Этот подход не слишком дружественный к новичкам, но значительно более дружественный к профессионалам. Из-за этого и недопонимание, и холивары.
Но мне не известен ни один пример перехода интернет-гиганта с MySQL на PostgreSQLИ это не означает, что их никогда не было.
хотя отечественный IT он весьма эм, самобытный.А если бы они использовали MySQL, вы бы не считали отечественный IT самобытным?
записывать MySQL в «legacy» несколько рановатоНикто его в legacy записывать не собирается, хотя у него много своих причуд и багов (о них писали выше, некоторые баги/причуды исторические и с ними надо просто смириться), и для высоконагруженного проекта я бы его не выбрал.
Презентации 7.5 лет, многое наверняка изменилось.
Но, как я написал в статье, в наиболее нагруженных и распределённых сервисах key-value — единственная работающая модель независимо от СУБД.
Что и с чем там JOIN-ить?Вы не могли бы уточнить свою точку зрения: в FB исспользуют join(но не признаются) или всё-таки не исспользуют(join «не нужен»)
я абсолютно уверенАга, а вот «даже если бы это было так», «никто не предоставил ссылок» — это кто-то другой писал. Ок.
исключительно key-value нагрузка.
Правильно я понимаю, что к тому, что я написал в статье, возражений нет?
1. Правильно ли я понимаю, что на текущий момент только Oracle имеет право создавать закрытые коммерческие форки MySQL, такие как MySQL Enterprise?
2. Что стало с темой, которая вызвала брожение умов в 2012 году? Ведь именно с этого момента и пошло «MySQL – проприетарщина».
1. В MySQL есть один проприетарный форк, а в PostgreSQL много. При этом PostgreSQL «открытый», а MySQL «проприетарщина».
2. В MySQL есть закрытые баги в багтрекере. А в PostgreSQL багтрекера нет совсем. Поэтому PostgreSQL «открытый», а MySQL «проприетарный»
3. В PostgreSQL все решения принимает сравнительно небольшая группа людей.
Вот решили, что не нужен им багтрекер, и нет его.
Решили, что не будет встроенной логической репликации, и нет её.
Решили, что не нужны хинты в оптимайзере, и нет их.
Но конечно же, «процесс разработки открыт и принадлежит сообществу». Эти мантры сколько не повторяй, реальностью они не станут.
А коммерческая компания не только имеет эксклюзивные права на продукт, но и вкладывает в разработку эксклюзивные коммерческие средства. Которые позволяют MySQL оставаться лидирующей базой данных для веб без каких-либо шансов для PostgreSQL занять эту нишу в обозримом будущем. Никаких сравнимых средств в разработку PostgreSQL никто вкладывать не станет, потому что лицензия BSD к этому не располагает, так как все результаты инвестиций окажутся в чьём-то проприетарном форке.
Парни, вы там в Postgres Professional молодцы со всех сторон, но с таким однобоким восприятием реальности я боюсь, что вы долго не проживёте. Религиозные секты долго не живут.
долго не проживёте. Религиозные секты долго не живут… сотрудников вашей компании и сообщество PostgreSQL в целом я не раз замечал в совершенно необоснованных утверждениях при очень слабом представлении о предмете… мне напоминает религиозную секту… придётся вылезти из детских штанишек...
Которые позволяют MySQL оставаться лидирующей базой данных для веб без каких-либо шансов для PostgreSQL занять эту нишу в обозримом будущем.
Главное препятствие, имхо, для PostgreSQL — это его некая элитарность в плане администрирования, а не модели разработки и копирайты.
1. В MySQL есть один проприетарный форк, а в PostgreSQL много. При этом PostgreSQL «открытый», а MySQL «проприетарщина».
2...— ваш фирменный стиль передергивания. Какое отношение багтрекер имеет к открытости в лицензионном смысле?
3. В PostgreSQL все решения принимает сравнительно небольшая группа людейА в mysql монетку подкидывают или голосование проводят среди пользователей?
Решили, что не нужны хинты в оптимайзере, и нет ихДа, тут аргументированный консенсус. Если в mysql на неделе семь пятниц, то это проблемы mysql.
Которые позволяют MySQL оставаться лидирующей базой данных для вебДа? А мужики-то не знают. Оказывается, только благодаря деньгам оракл mysql на каждом хостинге оказалась. Не иначе и фейсбук подкуплен ораклом.
Никаких сравнимых средств в разработку PostgreSQL никто вкладывать не станет...практика говорит об обратном. Если вы не считаете средства сравнимыми (вложенные теми же EnterpiseDB и Oracle), поделитесь данными.
Да? А мужики-то не знают. Оказывается, только благодаря деньгам оракл mysql на каждом хостинге оказалась. Не иначе и фейсбук подкуплен ораклом.
Ну так-то это правда, что после покупки Сана Ораклом у MySQL внутренние команды были существенно увеличены
Памятка евангелиста PostgreSQL: критикуем MySQL ещё грамотнее