I'm still working away at this book. What an experience. Constant
cloud over my head, making me feel obligated to use any spare
time I have I should be writing. Oh, and then there is Drizzle
which requires some time, not to mention DBD::drizzle.
Most of the work is reading, making sure what I write is correct.
I mean, most of what I write off the top of my head is correct,
because I know the material, but I want to make sure. There's
always that inner voice inside that says "Is this crap?" or "Wait
till so and so reads this, they will be shaking their heads and
saying blah blah blah". I suppose that's my insecurities
talking.
I like what I've written so far. I think is *is* good.
The basic content about MySQL gets a bit tedious, but I've
started working on other sections such as stored procedures and
now UDFs. I came up with a great UDF idea that I will use for an
example in the book as well as a great new …
Inspired by http://blogs.sun.com/thava/entry/dump_mysql_frm_file_header I jumped into http://forge.mysql.com/wiki/MySQL_Internals_File_Formats and tried to write a decoder for the .frm files. Sadly the internals document is missing all the interesting parts.
So it was time to get the hands dirty and get into the code ... it got really dirty. But I found a little gem in there.
If you are interested take a look at
open_binary_frm() or create_frm() in
sql/table.cc or mysql_create_frm() in
sql/unireg.cc. It has all the glory. You may have to
wipe off the dust a bit has this code is (I bet) as old as MySQL
is.
.frm-files are from a time when Monty wrote
Unireg …
I haven’t been using vim for very long, but I’ve gotten over the initial learning curve of getting used to the different editing modes. With some help from the guys in #vim on irc.freenode.net, I managed to get this gem:
map <C-d> :call SwitchDB()<CR>
:function SwitchDB()
: let g:current_db = input("Database > ")
:endfunction
map <C-m> :call Doquery()<CR>
:function Doquery()
: if !exists("g:current_db")
: call SwitchDB()
: endif
: let query_string = input(g:current_db . " > " )
: if query_string != ""
: exe "!mysql " . g:current_db . " -e \"" . escape(query_string,
'"') . "\""
: endif
:endfunction
Control-m to execute a query. Control-d to switch databases. It’ll prompt you the first time.
I thought a bit more on the adaptive send algorithm and kind of
like
the following approach:
Keep track of how many sends we are at maximum allowed to
wait
until we send in any ways. This is the state of the adaptive
send
algorithm which is adapted through the following use of
statistics
(we call this state variable max_waits):
For each send we calculate how long time has passed since
the
send that was sent max_waits sends ago. We also do the same
for
max_waits + 1. At certain intervals (e.g. every 10 milliseconds)
we
calculate the mean wait that a send would have to do, if this
lies
within half the desired maximum wait then we accept the
current
state, if also the mean value using max_waits + 1 is
acceptable
then we increase the state by one. If the state isn't
acceptable
we decrease it by one.
In the actual decision …
I spent some time today with the IT team of a large enterprise. There has been talk of an open-source job boom, but what I heard today suggested a relative dearth of critical open-source talent.
In this company's case, the IT team needs developers with deep MySQL experience. It'...
I am traveling to Europe next week to brief major prospects in Germany (Daimler, MAN) as well as to attend to administrative matters at Pythian Europe in Prague and would love to meet any readers of this blog during this trip!
I’m especially interested in meeting:
- DBAs, Applications Administrators and Systems Administrators,
- Potential customers (IT Directors, DBA Managers, Supply Managers for IT), and
- Potential partners (IT product of service companies that could partner with Pythian to delight our mutual customers)
Here is my itinerary:
- Sunday, August: Frankfurt,
- Monday, August 4: Stuttgart,
- Tuesday, August 5: Munich, and
- Wednesday, August 6 through Saturday, August 9: Prague, Czech Republic.
Please reach out to me using vallee@pythian.com if you would like to meet!
In a recent article, Matt Asay was musing about the aspects of hosting an Open Source project by yourself vs. using a public project hosting service like SourceForge, GitHub or Launchpad. He concluded that it's important for commercial/sponsored open source projects in particular to do the hosting by themselves, so they can maintain full control and can gain more insight, which hopefully will turn into more revenue at some point.
However, Matt seems to reduce "hosting" to "providing downloads" only:
Control and visibility. Given the importance of customer conversions, it becomes hugely valuable information to know that it takes, say, eight months on average for someone to buy the "Enterprise" version of …
[Read more]Welcome to the 108th edition of Log Buffer, the weekly review of database blogs.
With almost no ado at all, let’s begin with the bad news–from StatisticsIO and Jason Massie: The Death of the DBA. And who is the perpetrator of this crime? The Cloud! It sounds like something from a John Carpenter movie, doesn’t it?
Let’s see what Jason is thinking. “I’d like to retire a SQL Server DBA with 40 years experience but I don’t think that will happen. The cloud is coming and it is bad news administrators, database or otherwise. …
[Read more]
Dell has obtained a trademark on the term "Cloud
Computing".
http://tarr.uspto.gov/servlet/tarr?regser=serial&entry=77139082
People have been talking about computing in the cloud for years
now, and network designers have been using a cloud icon to
indicate "services on the internet out there somewhere" for over
a decade.
This trademark needs to be killed, it born generic.
Ever run through an integer before?
One of the early design decisions in Drizzle was we
were going to make the decision of field types simpler.
24bit ints? Multiple blob sizes? Display ranges on numeric types?
Floats over doubles?
Why do we have types?
Good storage.
Constraint
We took those two principles and made a couple of
decisions.
1) Blow the constraint, we throw an error.
2) Good strorage means not only size, but that we give the right
choices and no more.
Drizzle lacks a TINYBLOB, MEDIUMBLOB, and LARGEBLOB (every time I
see this my mind flips to the Goldilocks story...).
…