Saturday, December 25, 2010

Merry XMas!

Merry Christmas and Happy New 2011 Year!

Весела коледа и Честита Нова 2011 Година!

Thursday, December 23, 2010

Bug in TokuDB

I just found a bug on MariaDB version. I was able to replicate it 4-5 times.

MariaDB [test]> show create table video;

CREATE TABLE `video` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `artist` varchar(100) NOT NULL,
  `title` varchar(100) NOT NULL,
  `video` varchar(20) NOT NULL,
  `date` date NOT NULL,
  PRIMARY KEY (`id`),
  KEY `video_artist_ix` (`artist`),
  KEY `video` (`video`),
  KEY `date_id` (`date`,`id`)
);



MariaDB [test]> create table x_toku(
 `id` int(4) NOT NULL AUTO_INCREMENT,
 `artist` varchar(100) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `video_artist_ix` (`artist`) 
) ENGINE=TOKUDB ;
Query OK, 0 rows affected (18.51 sec)



MariaDB [test]> insert into x_toku select id, artist from video;
Query OK, 10875440 rows affected (54.39 sec)
Records: 10875440  Duplicates: 0  Warnings: 0



MariaDB [test]> delete from x_toku where artist like 'ma%';
Query OK, 274705 rows affected (22.49 sec)



MariaDB [test]> select count(*) from x_toku where artist like 'ma%';
+----------+
| count(*) |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)
*** THIS MUST BE WRONG, DIDN'T WE DELETED EVERYTHING ***



*** THE DATA PROBABLY COMES FROM THE INDEX ***
MariaDB [test]> explain select count(*) from x_toku where artist like 'ma%';
+----+-------------+--------+-------+-----------------+-----------------+---------+------+------+--------------------------+
| id | select_type | table  | type  | possible_keys   | key             | key_len | ref  | rows | Extra                    |
+----+-------------+--------+-------+-----------------+-----------------+---------+------+------+--------------------------+
|  1 | SIMPLE      | x_toku | range | video_artist_ix | video_artist_ix | 102     | NULL |    2 | Using where; Using index |
+----+-------------+--------+-------+-----------------+-----------------+---------+------+------+--------------------------+
1 row in set (0.00 sec)
*** YEP, USING INDEX ***



*** LETS TRY WITHOUT INDEX SCAN ***
MariaDB [test]> select count(*) from x_toku ignore index(video_artist_ix) where artist like 'ma%';
+----------+
| count(*) |
+----------+
|        1 |
+----------+
1 row in set (5.51 sec)
*** THIS STILL MUST BE WRONG, DIDN'T WE DELETED EVERYTHING ***



*** LETS SEE THE DATA ***
MariaDB [test]> select * from x_toku where artist like 'ma%';
+---------+------------------+
| id      | artist           |
+---------+------------------+
| 7953132 | mallu+adult2     |
| 6640134 | Martin+Nieverra1 |
+---------+------------------+
2 rows in set (0.00 sec)
*** HMMM ***



*** MAY BE IT GETS THE DATA IS MATERIALIZED FROM THE INDEX ***
MariaDB [test]> explain select * from x_toku where artist like 'ma%';
+----+-------------+--------+-------+-----------------+-----------------+---------+------+------+--------------------------+
| id | select_type | table  | type  | possible_keys   | key             | key_len | ref  | rows | Extra                    |
+----+-------------+--------+-------+-----------------+-----------------+---------+------+------+--------------------------+
|  1 | SIMPLE      | x_toku | range | video_artist_ix | video_artist_ix | 102     | NULL |    2 | Using where; Using index |
+----+-------------+--------+-------+-----------------+-----------------+---------+------+------+--------------------------+
1 row in set (0.03 sec)
*** YEP, USING INDEX ***



*** LETS SEE THE DATA WITHOUT INDEX SCAN ***
MariaDB [test]> select * from x_toku ignore index(video_artist_ix) where artist like 'ma%';
+----------+----------------------------------+
| id       | artist                           |
+----------+----------------------------------+
| 15292754 | Matt+Pokora+Catch+Me+If+You+Can1 |
+----------+----------------------------------+
1 row in set (5.24 sec)
*** DOUBLE HMMM ***


*** LETS SEE WHAT RECORD IS ACTUALLY REAL ***
MariaDB [test]> select * from x_toku where id in (7953132,6640134,15292754);
+----------+----------------------------------+
| id       | artist                           |
+----------+----------------------------------+
| 15292754 | Matt+Pokora+Catch+Me+If+You+Can1 |
+----------+----------------------------------+
1 row in set (0.00 sec)

Thursday, December 16, 2010

Monty says: A quick look at MySQL 5.5 GA

MySQL 5.5 is GA now.
I will soon check it more carefully, but here is what Monty says :)
Monty says: A quick look at MySQL 5.5 GA

Tuesday, December 14, 2010

MySQL bug and Optimization of nested query

There is strange bug in MySQL, it does not use primary key, if the value is NULL. Instead it do full table scan. Here is an example.
Copy / Paste this in text editor to see the correct post.

MariaDB [gateway]> explain select * from crontab where id = (select crontab from items where id = 19465650);
+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------+
|  1 | PRIMARY     | crontab | const | PRIMARY       | PRIMARY | 4       | const |    1 |       |
|  2 | SUBQUERY    | items   | const | PRIMARY       | PRIMARY | 4       |       |    1 |       |
+----+-------------+---------+-------+---------------+---------+---------+-------+------+-------+
2 rows in set (0.00 sec)


MariaDB [gateway]> explain select * from crontab where id = (select crontab from items where id = @id);
+----+----------------------+---------+------+---------------+------+---------+------+---------+-----------------------------------------------------+
| id | select_type          | table   | type | possible_keys | key  | key_len | ref  | rows    | Extra                                               |
+----+----------------------+---------+------+---------------+------+---------+------+---------+-----------------------------------------------------+
|  1 | PRIMARY              | crontab | ALL  | NULL          | NULL | NULL    | NULL | 3854804 | Using where                                         |
|  2 | UNCACHEABLE SUBQUERY | NULL    | NULL | NULL          | NULL | NULL    | NULL |    NULL | Impossible WHERE noticed after reading const tables |
+----+----------------------+---------+------+---------------+------+---------+------+---------+-----------------------------------------------------+
2 rows in set (0.00 sec)

MariaDB [gateway]> explain
select
   *
from
   crontab,
   items
where
   items.crontab = crontab.id and
   items.id      = @id;
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
1 row in set (0.00 sec)

Friday, December 10, 2010

Indexes on virtual columns in MariaDB 5.2

MariaDB [(none)]> use test;
Database changed
MariaDB [test]> create table x(a int not null primary key,
    ->    b varchar(32),
    ->    c int as (a mod 5) virtual,
    ->    d int as (a mod 7) persistent
    -> );
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> describe x;
+-------+-------------+------+-----+---------+---------+
| Field | Type        | Null | Key | Default | Extra   |
+-------+-------------+------+-----+---------+---------+
| a     | int(11)     | NO   | PRI | NULL    |         |
| b     | varchar(32) | YES  |     | NULL    |         |
| c     | int(11)     | YES  |     | NULL    | VIRTUAL |
| d     | int(11)     | YES  |     | NULL    | VIRTUAL |
+-------+-------------+------+-----+---------+---------+
4 rows in set (0.03 sec)

MariaDB [test]> insert into x(a,b) values(1,1),(20,20);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> select * from x;
+----+------+------+------+
| a  | b    | c    | d    |
+----+------+------+------+
|  1 | 1    |    1 |    1 |
| 20 | 20   |    0 |    6 |
+----+------+------+------+
2 rows in set (0.00 sec)

MariaDB [test]> create index c on x(c);
ERROR 1645 (HY000): Key/Index cannot be defined on a non-stored computed column
MariaDB [test]> create index d on x(d);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

MariaDB [test]> explain select * from x where d = 6;
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
|  1 | SIMPLE      | x     | ref  | c             | c    | 5       | const |    1 | Using where |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
1 row in set (0.00 sec)

Monday, November 15, 2010

MariaDB - drop in replacement of MySQL

MariaDB - drop in replacement of MySQL
I will speak at OpenFest conferention on 20.Nov.2010 15:00 , Sofia, Interpred, zala Plovdiv.
Map and additional info here:
http://openfest.org/archive/openfest-2010/program/

Friday, November 12, 2010

Friday, September 3, 2010

Речния кон

Книга на Йов
40.15 Ето сега речния кон който съм направил както и тебе; Яде трева като вол.
40.16 Ето сега, силата му е в чреслата му, И якостта му в мускулите на корема му.
40.17 Клати опашката си като кедър; Жилите на бедрата му са сплотени.
40.18 Костите му са като медни цеви; Ребрата му са като железни лостове.
40.19 Той е изящното дело Божие; Оня, Който го е направил, го е снабдил с меча Си.
40.20 Наистина планините промишляват за него храна. Гдето играят всичките полски зверове.
40.21 Ляга под сенчестите дървета, В скривалището на тръстиката, и в блатата;
40.22 Сенчестите дървета го покриват със сянката си; Върбите на потоците го обкръжават.
40.23 Ето, ако би придошла река, той не трепери; Не се смущава, ако би се и Иордан устремил по устата му.
40.24 Може ли някой да го хване когато е на щрек. Или да прободе носа му с примка?
41.01 Можеш ли да извлечеш крокодила с въдица, Или да притиснеш езика му с въже?
41.02 Можеш ли тури оглавник на носа му, Или да пробиеш челюстта му с кука?
41.03 Ще отправи ли той към тебе много моления? Ще ти говори ли със сладки думи?
41.04 Ще направи ли договор с тебе, Та да го вземеш за вечен слуга?
41.05 Можеш ли игра с него както с птица? Или ще го вържеш ли за забава на момичетата си?
41.06 Дружините риболовци ще търгуват ли с него? Ще го разделят ли между търговците?
41.07 Можеш ли прониза кожата му със сулици, Или главата му с рибарски копия?
41.08 Тури ръката си на него; Спомни си боя, и не прави вече това.
41.09 Ето, надеждата да го хване някой е празна; Даже от изгледа му не отпада ли човек?
41.10 Няма човек толкова дързък щото да смее да го раздразни. Тогава кой може да застане пред Мене?
41.11 Кой Ми е дал по-напред, та да му отплатя? Все що има под цялото небе е Мое.
41.12 Няма да мълча за телесните му части, нито за силата му. Нито за хубавото му устройство.
41.13 Кой може да смъкне външната му дреха? Кой може да влезе вътре в двойните му челюсти?
41.14 Кой може да отвори вратите на лицето му? Зъбите му изоколо са ужасни.
41.15 Той се гордее с наредените си люспи, Съединени заедно като че ли плътно запечатани;
41.16 Едната се допира до другата Така щото ни въздух не може да влезе между тях;
41.17 Прилепени са една за друга, Държат се помежду си тъй щото не могат да се отделят.
41.18 Когато киха блещи светлина, И очите му са като клепачите на зората.
41.19 Из устата му излизат запалени факли, И огнени искри изкачат.
41.20 Из ноздрите му излиза дим, Като на възвряло гърне над пламнали тръстики.
41.21 Дишането му запаля въглища, И пламъкът излиза из устата му.
41.22 На врата му обитава сила, И всички заплашени скачат пред него.
41.23 Пластовете на месата му са слепени, Твърди са на него, не могат се поклати.
41.24 Сърцето му е твърдо като камък, Даже твърдо като долния воденичен камък.
41.25 Когато става, силните се ужасяват, От страх се смайват.
41.26 Мечът на тогова, който би го улучил, не може да удържи, - Ни копие, ни сулица, ни остра стрела.
41.27 Той счита желязото като плява, Медта като гнило дърво.
41.28 Стрелите не могат го накара да бяга; Камъните на прашката са за него като слама;
41.29 Сопи се считат като слама; Той се присмива на махането на копието.
41.30 Като остри камъни има по долните му части; Простира като белези от диканя върху тинята;
41.31 Прави бездната да ври като котел; Прави морето като варилница за миро.
41.32 Остава подир себе си светла диря, Тъй щото някой би помислил, че бездната е побеляла от старост.
41.33 На земята няма подобен нему, Създаден да няма страх.
41.34 Той изглежда всяко високо нещо; Цар е над всичките горделиви зверове.

Tuesday, August 17, 2010

Tuesday, August 10, 2010

ЕС

Бай Ганю: - Европейски съюз?! Бошлаф, празна маса!..
карикатура: Тодор Цонев

Sunday, August 8, 2010

Friday, August 6, 2010

Another Tatra 603 and Mig 15


I guess this is same car and same airplane as from the old post

p.s. Old post is on flickr:
here

Thursday, August 5, 2010

Strange PBXT issue

MariaDB [test]> create table b (a int primary key) engine=pbxt;
Query OK, 0 rows affected (3 min 43.59 sec)


MariaDB [test]> insert into b values(1);
Query OK, 1 row affected (8.08 sec)


MariaDB [test]> insert into b values(2);
Query OK, 1 row affected (8.08 sec)


MariaDB [test]> insert into b values(3);
Query OK, 1 row affected (1 min 21.43 sec)


MariaDB [test]> select * from b;
+---+
| a |
+---+
| 1 |
| 2 |    Hmmm? where is 3?
+---+
2 rows in set (0.00 sec)


MariaDB [test]> insert into b values(3);
ERROR 1062 (23000): Duplicate entry '3' for key 'PRIMARY'


MariaDB [test]> select * from b where a  = 3;
+---+
| a |
+---+
| 3 |
+---+
1 row in set (0.10 sec)


MariaDB [test]> select * from b order by a;
+---+
| a |
+---+
| 1 |
| 2 |
| 3 |
+---+
3 rows in set (0.00 sec)

Friday, July 30, 2010

File Copy

If you do not see animation, please click on the image to start

Tuesday, June 29, 2010

Кристалният Джакомо

Едно време в далечен град се родило прозрачно дете. През него можело да се вижда както през въздуха и водата. Било от плът и кръв, а изглеждало като от стъкло и ако паднело, не се строшавало, най-много на челото му из­лизала прозрачна цицина.

Виждало се как бие сърцето му, виждало се как мис­лите му играят като шарени рибки в басейна си.

Веднъж по погрешка детето казало една лъжа и вед­нага хората видели нещо като огнена топка зад челото му: то казало истината и огнената топка се стопила. Оттогава нататък през целия си живот то не казало нито една лъжа.

Друг път един приятел му поверил тайна и веднага всички я видели като черна топка, която се въртяла в гър­дите му, не му давала мира, и тайната престанала да бъде тайна.

Детето пораснало, станало младеж, после мъж и всеки можел да чете мислите му и да отгатва отговорите му, ко­гато го питали още преди да е отговорил.

Той се казвал Джакомо, но хората го наричали «Кри­сталният Джакомо» и всички го обичали заради неговата честност и край него всички ставали по-добри.

За жалост в тая страна се издигнал да управлява един жесток диктатор. Започнал период на насилия, неспра­ведливости и нещастия за народа. Който посмеел да се въз­мущава, изчезвал, без да остави следа. Който.се бунтувал, бил разстрелван. Бедните били преследвани, унижавани и оскърбявани по стотици начини.

Хората мълчали и страдали поради страх от послед­ствията.

Но Джакомо не умеел да мълчи. Дори и да не отварял уста, неговите мисли говорели вместо него: той бил прозрачен и всички четели зад челото му мисли на възмуще­ние - Джакомо осъждал несправедливостите и насилията на тирана. После тайно хората си повтаряли мислите на Джакомо и се обнадеждавали.

Тиранът накарал да арестуват Кристалния Джакомо и заповядал да го хвърлят в най-мрачния затвор.

Но тогава се случило нещо изключително. Стените на килията, в която Джакомо бил затворен, станали прозрач­ни, след тях — стените на затвора, и най-после — външ­ните стени. Хората, които минавали край затвора, виждали Джакомо седнал на своето столче, сякаш и затворът бил от кристал, и продължавали да четат мислите му. Нощем затворът разпръсквал силна светлина и тиранът в своя дворец трябвало да спуска всички завеси, за да не я вижда, но пак не успявал да заспи. Кристалният Джакомо, макар и във вериги, бил по-силен от него, защото истината е по-силна от всяко нещо, по-светла от деня, по-страшна от ураган.

Friday, February 26, 2010

Календар на Маите на Вашия мобилен телефон



Според календара на Маите, всеки ден е уникален и действията, задачите, и делата ни траяба да са съобразени с времевите цикли.
Първоначално Маите имат календар от 260 дни в годината. Броенето става с две въртящи се едно от друго зъбчати колела. С течение на времето добавят и трето зъбно колело, с което годината добива 365 дни. Разделението на тези дни е на 18 месеца със съответно 20 дни и един месец "Уайеб" с 5 дни. Всичко заедно дава една "година" от (18 * 20) + (1 * 5) = 365 дни. Четвърт деня, който остава при високосни години се пренебрегва от маите.
За ежедневието това е достатъчно, но не и за писане на история, защото годините се повтарят през 52 години. За да избегнат това, Маите са разделили времето на цикли. Нулевата точка на историческото зъбно колело съответства на 13.Aвгуст.3114 пр.Хр. Това е началото на последния възголям цикъл на времето, който свършва на 21.Декември.2012. Всеки голям цикъл е разделен на по-малки цикли, както се използват столетия, десетилетия и пр. Дадена дата се състои от няколко числа, чието първо число е броя на най-големите цикли от началото на възголемия цикъл (подобно на столетия, но по майската система). Следват по-малките цикли и накрая всичко се отнася към цикъла от 52-те години.

Получете всекидневно тази информация от календара на маите на вашия GSM