Trying to make a good first few implementation iterations is hard and is sometimes made harder by specifications which are not minutely detailed. When the specification is vague, organic development sometimes seems to excel, partly because there is little or no worries about refactoring or redesigning as necessary. Trying to make something absolutely perfect on the first iteration is difficult,
Today I finally had some time to go back and work on refactoring
the patch Milos did for his Google Summer of Code project for
MySQL. I started doing this about a month ago but hit a snag with
my time and wasn't able to get back to it.
Well...
[brian@zim client]$ ./mysql --protocol=tcp --host=::1 --user=root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 5.2.6-alpha-debug-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
So now it is just a matter of a few more cleanups to make it
work. I fixed the localhost hack to handle issues with ipv6
having a different scheme for 127.0.01.
I've dropped a source tarball here:
…
Following up on the release of the Japanese versions of the certification exams, our Japan office has decided to run a campaign with a 20% discount off the exam price.
You gotta be quick, though… this is only for the first 100 takers!
One thing about this campaign that’s pretty cool is that you get a choice: You can either take a straight discount, reducing the exam price by 20% up-front. Or you can pick another option and get a gift card to Amazon for the same value.
More information (in Japanese, of course) available here.
MySQL Workbench has a beta out! No idea why its version 5.0.9, but its highly exciting. This software existed before, but this is quite unlike its predecessor. One snag for me is that it is Windows-only at the moment, with Linux and OS X versions to follow suit.
However, due to excitement, I decided to try running it on Linux, anyway.
Seeing that it is a .NET application, I thought I’d pass it
through MoMA (the migration analyser). Everything passed,
so I got excited. Running mono MySQLWorkbench.exe however, led me
to a failure:
** ERROR **: Method
‘<Module>:<CrtImplementationDetails>.DoDllLanguageSupportValidation
()’ in assembly ‘/home/byte/Downloads/MySQL Workbench 5.0.9 OSS …
I get questions on how to build mysql application from time to
time, and I wanted to share the response to the question
below.
In the beginning, should a developer try and stay away from
complex JOINS? Is it better to use many smaller queries and cache
the results (using something like memcached) rather than 1 larger
query requiring multiple table JOINS?
Needing to scale for millions of users is a great problem to
have, but should I worry about it in the beginning? Whats the
best approach to db design for day 1?
Well IMHO build the application, build it to spec. When the scope
changes (and this will always happen) flow with it. This is in no
means a knock against Product-I actually look forward to this,
because things are being discussed and if something needs to
change lets do it!
Now how to build the application to scale: Look at the scope of a
page …
Firstly, I'd like to thank Jay Pipes for adding me to planetmysql. If
you came to my blog through this website, then welcome. I promise
I will try to continue to write good quality posts and maybe even
use the spell checker from time to time.
So let me introduce myself. My name is Jonathan and I am
currently employed by a company that owns a online
hotel-reservation system. I have been living in Beijing, China
for the last year and soon plan to move back to the UK. I am
creative at finding solutions to problems and I use this blog to
express my ideas. I started this blog to try to contribute back
to the MySQL community by coming up with new ideas and hopefully
implementing them as well.
So the purpose of this post is to highlight my previous posts (my
greatest hits).
- …
These days, DRBD is a popular way of achieving HA without having to pay for a SAN and it plays nicely with MySQL. DRBD uses a network connection to mirror two disk partitions on two servers and can use a lot of bandwidth so, usually, the servers are connected through a crossover cable. Recently, I did an engagement where we were setting DRBD for a 100 GB partition on two servers hosted in one of the largest hosting company in the US. For extra reliability, the DRBD private network was using a bond of two Ethernet adapters on each servers.
For a reason that I am not aware of, the hosting company chose to use a VLAN for the private DRBD network instead of a pair of crossover cables. When we started the first DRBD synchronization, loading the private DRBD network at 110 MB/s. At that point, something interesting happened… Here is the explanation of the network engineer of the hosting company. Because of the bonding and the bonding mode chosen …
[Read more]
The optimizer is the part of the mysql server whose
responsibility is to discover the optimal plan (the execution
oath) to solve an SQL query.
When dealing with joins there exist various execution paths
depending on the number of tables involved. The number of
possible plans to investigates grows exponentially with the
number of tables. This is not a problem for queries with few
tables (less than 10) but could be a serious problem when the
number of tables climbs.
When dealing with dozens of tables the time spent to evaluate all
possible plans to solve the query is longer than the execution of
the query itself. Not good.
Starting from version 5.0.1 MySQL introduces a flexible method to
avoid the possible bottleneck when you have lot of tables joined
in a query.
Using the system variable optimizer_prune_level (possible values are 0 or 1) you can tell the optimizer to skip certain plans from being inspected based …
[Read more]Following my successful linux.conf.au talk “Eat My Data: How Everybody Gets POSIX File I/O Wrong“, I started to feel the need to easily be able to have my data eaten.
Okay, not quite. However, when you’ve written your software properly, so it uses fsync() correctly, opening files with O_SYNC or whatever - tests take longer as you’re having to wait for things to hit the rust.
So….. LD_PRELOAD=libeatmydata.so to the rescue! With a POSIX compliant fsync() (that does nothing) and filtering on open(2), it can take your test run times down dramatically.
The only time you shouldn’t use it for your tests is when you end up crashing the machine to test durability (i.e. when the OS doesn’t have the opportunity to cleanly write out the data to disk).
See the …
[Read more]There have been numerous occasions where I needed to make backups of individual tables from selected database. Usually I can achieve this by typing: mysqldump database_name table1 > table1.sql mysqldump database_name table2 > table2.sql
This could be very painful if you have 10?s or 100?s of tables. Until today, I never ran into a situation where I [...] …
[Read more]