/dev/random >> /dev/brainНе следует забывать, что постоянный количественный рост и сфера нашей активности позволяет выполнить важные задания по разработке позиций, занимаемых участниками в отношении поставленных задач. | ||
Ничего не работаетВы часто слышали фразу "Ничего не работает" ? Это означает, что все в порядке, т.к. ничего работать не может.
MySQL: Сравнение баз данныхВ простейшем случае для сравнения двух баз данных достаточно сделать дамп и потом полученные дампы сравнить, например: mysqldump --no-data -hlocalhost -uroot -proot --database db1 > db1.sql mysqldump --no-data -hlocalhost -uroot -proot --database db2 > db2.sql diff db1.sql db2.sql Если нам такого сравнения недостаточно, тогда можно использовать maatkit, который сейчас свходит в состав Percona Toolkit. Под Ubuntu можно установить так: apt-get install maatkit Для сравнения мы используем утилиту mk-table-checksum, в Percona Toolkit она называется pt-table-checksum Для начала повторим операцию сравнения структуры баз данных, для этого используем параметр --scheme mk-table-checksum --schema --databases db1 h=192.168.200.90,u=root,p=root h=192.168.200.8,u=root,p=root Также можно сравнить еще и содержимое баз данных: mk-table-checksum --databases db1 h=192.168.200.90,u=root,p=root h=192.168.200.91,u=root,p=root DATABASE TABLE CHUNK HOST ENGINE COUNT CHECKSUM TIME WAIT STAT LAG db1 table1 0 172.16.200.8 InnoDB 21553519 d3170771 0 0 NULL NULL db2 table1 0 172.16.200.90 InnoDB 21553519 870dce57 1627 0 NULL NULL Чтобы убрать одинаковые используем утилиту mk-checksum-filter(У перконы не нашел аналогичной тулзы), пример:. mk-table-checksum --databases db1 h=192.168.200.90,u=root,p=root h=192.168.200.8,u=root,p=root | mk-checksum-filter Описание ключей здесь не описываю, это просто примеры использования, описание ключей смотрите в документации. Ньюанс использования ORMМногие разработчики при использовании ORM совершенно не задумываются о том, как оно работает внутри. Простейший пример кода: obj = MyItem::getById(10); obj.a = 1; obj.b = 2; obj.save(); Казалось бы какие сюрпризы может хранить в себе этот простой код ? Посмотрим какой у нас получился sql-запрос: UPDATE tableName SET a=1, b=2, somefield=100 WHERE id=10; Откуда у нас появилось поле somefield ? Некоторые реализации ORM при сохранении объекта не проверяют изменилось значение поля или нет, поэтому обновляют сразу все поля объекта. Некоторые спросят, где подвох ? Объект сразу же сохраняется, все в порядке. Но в промежутке, перед сохранением, некоторые свойства объекта могут измениться, а вы будете сохранять старое значение. В результате вы будете периодически замечать потерю данных, воспроизвести которую в среде разработки будет довольно сложно. Во многих ORM данная проблема решена через метод update(), который обновляет только некоторые поля, но на мой взгляд, это костыль, который возвращает назад к SQL, от которого хотели уйти, используя ORM. P.S. Это замечательно, если в вашей ORM подобная ситуация не воспроизводится, но не сомневайтесь, там есть другие не менее замечательные ньюансы. БредогенераторНаписан небольшой генератор предложений, его работу можно увидеть в шапке.
P.S. предложение меняется при каждом полном обновлении страницы.
Прикручен ajaxТеперь тут везде аякс и торжество мира и справедливости :)
|
Здесь могла бы быть ваша реклама, но будет ... Widget_sidebar | |
| © Copyleft Nicetest.RU 2012 | ||