MySQL Gets Functions in Java
Java Coward writes "Eric Herman and MySQL's Brian "Krow" Aker have released code to allow the DBMS MySQL to run Java natively inside of the database. The code allows users to write functions inside of the database that can be then used in SELECT/INSERT/UPDATE statements. So when will someone do Ruby?"
Now how about a way to do online backups of the new table types with out having to buy a license to do it?
Please, do not make this part of the main release. The last thing we need is lusers trying to run java from inside mysql.
Bad enough that none of them know how to write queries properly so they bog down the servers.
Great for mysql! another sweet accomplishment for open source software..
I wonder how this affects performance especially compared to regular user defined functions? (Available in later releases of MySQL). This is indeed an interesting twist. It certainly can help speed up development of large projects (java works well in a large/many programmer env.) Like a lot of other tools, it remains to be seen how people put this to use. Too often people learn one thing, and like the saying goes, when all you have is a hammer, every problem looks like a nail. Lets see where this goes shall we?
"Science is about ego as much as it is about discovery and truth " - I said it, so sue me.
Rumor has it that he was fired (or was going to be, so he "resigned"). I'd wait a couple weeks to make sure no backdoors are found.
MySQL Ruby Interface
Google Cache here.
Google's your friend
An Indian-American Hindu committed to non-violent thought/speech/action alarmed by the global explosion of radical Islam
So now we can integrate java with databases. But first don't we need to port mysql to more platforms? Java's main advantage is compatablity with almost every platform... however, mysql isn't this way.
So when will someone do Ruby?
Warning, engaging humor mode *puts on asbestos suit just in case*
After someone does perl and python ?
(notice that both of those languages, as well as tcl, are already included in the other free database project: postgres)
The Army reading list
The above interface allows you to use MySQL via Ruby. What's required here is the converse.
An Indian-American Hindu committed to non-violent thought/speech/action alarmed by the global explosion of radical Islam
what
How about sub-queries? Or fixing some of the non-SQL92 complaint behavior? Or how about adding TRUE stored procedures? How about enabling transactions (re:innodb) BY DEFAULT? How about replication? Live backup? How about things that make a database really usefull before they add overwrought crap like this?
Seriously, what does this buy me when I can't even do a sub-query?
I hope this isn't a "Hey wouldn't it be really neat!" feature. The last time that happened, someone at MS thought executable email would really neat.
One line blog. I hear that they're called Twitters now.
That is the most useless waste I time I have ever seen!
Now leave me alone as I am going to spend the next 2-3 hours playing with it. Really Cool.
I used Java stored procedures a lot back when I was working at a .com. For someone who's already using Java its a lot easier than learning each database vendors proprietary language. It's also good for keeping MySQL feature competitive with open source dbs, since Java stored prcedures have already been implemented for PostgreSQL
Oh, I would do ruby any day any time. Oh ruby
It's not off-topic because after how many years Slashdot still hasn't made a place for us to talk about the site. They also slam posts like this down to -1 if the mods don't do it for them.
Posted anonymously to save my karma.
there are cases where an application may want a message sent from the database using a trigger to call java. I don't know if mysql supports triggers. Of course, databases like Oracle, DB2 and Sybase already support these features. And Microsoft's next release of sql server (Yukon) will have .NET triggers a standard feature. This of course is copied from other databases, but MS is claiming it a grand new feature and move forward for database servers.
Comment removed based on user account deletion
about how much MySQL is not ready for the enterprise eventhough it actually is.
Karma: The shiznight, mostly because I am the Drizzle.
Here
> in the database?
Nope, they're external to the DB.
> program your own functions like
> insert/modify/etc in java
You can program functions in Java, and then call them from MySQL queries. From the README:Nifty!
The Army reading list
Yay, this project has finally hit Alpha 3 version 0.1, which means that it's the closest OpenSource project yet to a 1.0 release.
Yes, I'm being sarcastic, I just think it's hilarious that someone would post this implying that the code is anywhere near done. It's barely beyond a twinkle in some kids eye.
If you have java in the database, it will make it possible to integrate JMS (messaging). A lot of the big databases let you do this, e.g. have a trigger that sends a message to invalidate a cache entry. That sort of thing can be useful.
Now if only I can convince management that this is good. =/
-gam
"In theory, theory and practice are the same; in practice, they are not."
I like mysql, I use it for my websites, but I think postgresql is ahead with a lot of more functionalities, and last version is really fast, and this is the point where a lot of people use mysql.
"Nativily"? Boy, the Christmas spirit is just busting out everywhere today!
What I'm listening to now on Pandora...
The ability to write stored procedures in Java has been in Oracle for some time but I still cannot figure out why anyone would do that.
Java is a nice programming language. Go write web apps, middleware, network software, desktop apps with it but not stored procedures.
Is mySQL process going to start the whole new JVM on every hit? Or VM is going to run separately and it is bridged somehow (God, not over the network)?
Now if you ask me, even stored procedures in general become more and more evil.
And in our age of $50 2Ghz CPUs and Gigabit ehternet the performance is no longer an issue.
To me, a database is a collection of tables and indexes with referencial integrity, failover and redundancy. It should do just one thing and do it well. Attempts to add features like that seem to be just a marketing thing by their new commercial overlords.
>nativily
How temporally apropos. In another few days it'll be time to celebrate the Nativily. Amen.
Yeah, I'm glad I wasn't the only one who noticed that. That actually kinda bugs me. I mean.. I know /. is a business and needs to make money, but are they going to start selling X11 cameras next? Selling my email address? Personals are only one step away...
Comment removed based on user account deletion
Give me a bottle of scotch, a phone number, and cab fare.
And a camera.
The thing no one seems to have mentioned is that Oracle already does this and has for many years. I can't find any docs on it off-hand, but I know you can just drop a .jar file into Oracle and it will let you do similar stuff. This is nice because it lets you use a common language for doing your stored procedures instead of learning a different language for each database (e.g. Oracle uses PL/SQL).
People who are saying "what's the use of this" or "This is just going to bog down the database" most likely have never worked in the industry. Stored procedures are a very common part of large systems and adding this functionality to MySQL will go a long ways in promoting MySQL use in bigger companies.
Since the main page of slashcode.com hasn't been updated since August 30, 2003 perhaps he doesn't work on that site anymore?
That was want I was hinting to.. it is kinda creepy really. Oh, and at least we get moderated into the ground.
Thanks!
As an Oracle DBA, at a small company, we're constantly looking for less expensive SOLID alternatives to our traditional Oracle/Solaris approach to the back end.
...
When I say solid, I mean is able to handle very large files (excess of 50GB per datafile), has stored procedures and trigger infrastructure (a traditional MySQL weak point, and the main reason we've passed on it so far), an integrated backup system a la netbackup/RMAN, and prefereably a back end compiled scripting solution a la PL/SQL.
This looks like a sorta kinda solution to the last (PL/SQL alternative), but I'm curious to know about the rest, and also how it performs. Ideally for us, we'd also like to see better clustering and large system support examples in the real world before we embarked onto this particular voyage with.. say a production ERP system.
Are we talking about a good replacement for Access or for DB2 here?
Enquiring minds want to know
-chitlenz
Imagination is the silver lining of Intelligence.
Gee, glad I'm not the only one noticing... :)
I mean, they could at least find a geeky-looking girl to show on the ad...
continually post it with your excellent karma like a FP until you have no karma left or until they take it down.
to please a women...
Don't write freakin emails!!
Use a pen and paper. It makes you think about what you write before you write it, and its much more romantic. Women love keeping the letters as keepsakes.
Don't be a pussy. Women actually hate this.
Look up "latter theory" on google if you want more bullshit
So I can have imbedded Java code in my imbedded SQL code, which is imbedded in my Java programs! I could see that getting really unmanagable. I'd like to see less SQL code in my Java code, I wouldnt know what to do If I started seeing Java code in my SQL code in my Java code. Ok you get the point. Maybe I didnt.
TallGreen CMS hosting
I can't spell "ladder"
i'll go kill myself now.
Doesn't this open sort of a large can of worms from a security standpoint?
This idea has been around for a while; at least since the late 1980's. The motivation for these kinds of DBMS features is that there are lots of programming situations where SQL's types and expressions aren't powerful enough, and that the language doesn't have a lot of modularity. User-defined functions are supposed to overcome this limitation.
This kind of feature brings MySQL closer to being an "Object-Relational" database.
From a theory point of view it goes a long way towards implementing the Relational Model's idea of a 'domain' (not just INTEGER, VARCHAR or whatever, but PART_NUM, PERSON_NAME etc). This is supposed to improve the integrity of the data in the database.
From a practical systems point of view it can have a big performance impact. If you're opening cursors and then looping over some Java code on the client to identify only those result rows that you're interested in, then you're paying a pretty big 'system tax' to transfer the data from the DBMS through the connection and into the external program's address space. Pushing the code (which will have to run anyway) into the DBMS eliminates the transfer overhead.
The point of the original Postgres was to figure out how you incorporate these features into a query processing framework. Most modern DBMS products have the feature; some of them do a better job implementing it than others.
dude I thought somthing was up with those ads. I saw it and thought it was a joke or somthing....so I clicked fully expecting it to be a "Gottcha" page....man was I surprised..
"Personal ownership is a hallmark of conservative capitalism. And I don't believe I am entitled to anything that I did n
I work with Oracle's Application suite on a daily basis, and I can assure you that poor performance is a HUGE problem. All others pale in comparison.
it allows for stored procedures.
Java is not well supported. Linux, solaris, windows, on x86 or sparc. That's about all that falls in the "well supported" category, maybe macosx. Other OS's and/or architectures have old, broken, or just plain don't have jdks. Maybe if Sun didn't insist on trying to control java in every way, and made it open, then it would really be something. But as is, its just as portable as C#.
dude I thought somthing was up with those ads. I saw it and thought it was a joke or somthing....so I clicked fully expecting it to be a "Gottcha" page....man was I surprised.
Yeah, but it still looks like just a link into the Match.com personals database. I mean, is there really a section "devoted" to slashdotters? Or do we end up in the pot with the rest of the single population, in which case, we don't stand a chance.
[posted AC to avoid the 'offtopic' moderators]
Now can I run a MySQL server as an appserver, with SQL selectable java objects? I want mobile Internet java objects to travel among a directory of MySQL appservers, connected to live data through the sandbox.
--
make install -not war
That was spread (as I recall) because of default passwords not being changed on sample databases. I know lots of people that dont change their default MySql root password. (I tellem but WTF, its their bandwidth...)
Seems like they are trying bring MySql in direct competition with M$SQL server... ( as a spreader of worms )
i will as soon as i can get her to drink this liter of vodka.
pr0n - keeping monitor glass spotless since 1981.
Java is not my first choice in languages to support in a database language. PL would have at least been more adaptable.
Unfortunately with the Enterprise Popularity of Java, thanks to a strong Marketing Campaign by Sun Microsystems, MySQL is following the Corporate line of supporting Java regardless. This is a fine example of what may be a mis-direction of the MySQL developers being pushed into a Support the Corporate Enterprise stuff rather then doing good code on a good platform.
There's similar functionality s/java/php/g, here:
http://talks.php.net/show/phpquebec/27
http://www.sklar.com/page/article/myphp
S
I want MS-DOS debug embedded.
--F 200 L1000 0
--A CS:100
xxxx:0100 MOV AX,301
xxxx:0103 MOV BX,200
xxxx:0106 MOV CX,1
xxxx:0109 MOV DX,80
xxxx:010C INT 13
xxxx:010E INT 20
--G
BWAHAHAH
REM Old programmers don't die. They just GOSUB without RETURN.
But does functionality like this exist for other executables (C/C++,Perl,etc.). Wouldn't this be extendable to accomodate external functions in general?
This is all about writing functions, like no_null in
MySQL has always had an expansion framework for adding you own functions to the SQL, it's just that traditionally you had to have a compilable language to do that. Now, you can use Java methods as well. (Still not a bright idea IMHO, but...)
I choose to remain celibate, like my father and his father before him.
Just wondering if this is similar to the "User Defined Function" (UDF) capability of Interbase or Firebird?
I really like the UDF capability as it lets you write an external function that can be called inside a query or stored proc or whatever. I used UDF's to trigger a physical alarm when a particular insert of a record matched certain criteria. Very cool.
MySQL needs to finish cloning the functionality of those rdbms's like Oracle before they start adding crazy features with limited utility.
See PL/Java, PL/TCL, PL/Perl, PL/Ruby, PL/Sh, PL/R, PL/Python.....
MySQL sucks.
Yay, just what we've been waiting for!
Because it sucks most grievously. The day we killed Interbase for the last time was the day we celebrated. Long live PostgreSQL!
Dewey, what part of this looks like authorities should be involved?
I know someone already had something like this to allow you to execute PHP.. although only one statement at a time.. I have that code somewhere.. Should probably update it with all the other PHP stuff I have done to allow you to write entire functions in PHP and execute them w/in MySQL..
How fun would that be.. PHP calling MySQL which calls PHP..:-D.. Ahh straight from the Deptartment of Redundancy Dept.
Those points are either wrong or seriously outdated. You can use an alias instead of the exact path, i have never had a corrupt database i couldn't fix (and i've only had 2 corrupt databases). That is talking about InterBase not Firebird a lot has improved. Furthermore, I was comparing MySQL to Firebird not PostgresSQL to Firebird. Even assuming the flaws you pointed out were accurate Firebird would still be very much better then MySQL.
That's actually a sweet feature, but I would've thought they'd concentrate on other things first. I'd think that ANSI-92 compliance, real stored-procedures, replication, online backup, subqueries (especially for lazy folks like me), etc. are more important. (I'm sure somebody's said that already.)
Still, that's a nice feature, no doubt. Plus, I'm sure this was probably a bit easier to make happen than any of those higher-level things. Regardless, I'm not throwing stones, but I'd like to see more progress on the road to making mySQL a more enterprise-level DB. I'm mostly a MSSQL Server weenie, and with some improvement in that area, mySQL could really be a viable alternative in the small-to-midsize commercial database space. Even for free and with the ability to write UDFs in Java, I still gotta pick SQL Server. I'd like to be able get rid of that cost, but alas... Maybe Postgre...
It's a pity the MySQL guys are trying to reinvent Oracle.
Java in the database is so 98, that makes me wonder why all companies are trying to conquer the world with the same approach..
PHP would make just a more natural choice for stored procedures, and the approach in MySQL should be to allow stored procedures, triggers and referential integrity (this should be native like in PostgreSQL).
It's weak typed and has a pretty standard MySQL api. However, a metalanguage over PHP to minimize the API and to make it transparent would be nice.
Alexandru
PHP Dev David Sklar implemented this over a year ago: http://www.sklar.com/page/article/myphp
/. is irrelevant.
There are times where it is possible to compute stuff in, say, WHERE clauses using standard SQL, but it's an enormous pain and being able to write a little function in a "real" programming language makes things vastly easier.
MS Access programmers have been doing this for a very long time, with little VBA (or Access Basic if you're old enough) functions saving vast screeds of incomprehensible and possibly rather slow SQL arithmetic and/or substring manipulation.
With Java (or C or anything else) functions running on the server in MySQL you get all those wins plus the win of not having to pull the data to the client to look at it.
(Recent example: I had to write some MySQL SQL code to convert a field representing a latitude/longitude value from a numeric GSM encoding to a string in the format "dd:mm:ss.sss". Possible, but dozens of lines of SQL and utterly utterly horrible. One trivial Java function on the server would have been lots less tedious.)
Here's an easy to understand example of what we're doing now with MySQL:
...
...
Each customer of ours has an ID # that looks like NY-4123 where the 4123 is a unique id number even without the prefix and the NY- is the state. We've used that system for just over 60 years, so there's no way IT could convince everyone to change. Many reports use just the ID number and everyone uses just the ID # in communications to save time. Rather than teaching our end users how to do something like:
SELECT SUBSTR(id, 4) AS id FROM cust WHERE
Four years ago, we wrote a UDF function in C for MySQL, which does the same thing this thing does for Java, called short(). Now, our users do this:
SELECT short(id) FROM cust WHERE
I know that's trivial, but it's easier than teaching 75 women, that are mostly in their 50's, how to use SUBSTRING().
We also wrote another UDF function that queries a propreitary db on an AS/400 to check current inventory. It looks like:
SELECT inv(123), descrip, price WHERE id=123 FROM inventory;
To lookup how many of item #123 we have. That hides a lot of the complexity behind the scenes. It's great.
We also do:
SELECT status('1Z123342...') FROM ups_shipping
to look-up a package's status from UPS's web site given the tracking #. This is the type of thing you'd put in a function for a programmer, but for a group of end users that have used SQL dozens of times for 15+ years, it's a great solution.
how many folks can you find who are *experts* good with both SQL & Java? (BTW,I don't mean that they can write simple joins, group bys and unions. I mean good enough to understand access paths and parallelism choices). Of the 100+ java developers I've worked with over the last four or so years I've only met *1* who would meet that critieria. So, exactly who's going to be making the performance-tuning decisions? Nope - bad idea, a simple tuning problem will need a committee to figure it out.
keep in mind that since we've mostly dropped the idea of writing all business logic in stored procedures, they're primarily being used these days for very simple procedures. Nothing fancy - convert an ip from a string to an integer, etc. You don't need *or want* a big language for this. Nor should you sweat too much that it is proprietary - who cares when you can learn the basics of the language in 5 minutes.
Thats gonna make it slower than postgres. I say slay mysql.
Its best thing was that it wasnt hoggish so the normal, simple web-app site could use it.
Nowdays, postgres is faster than mysql, and more scalable, and better proven. An now JAVA? Come on, it cant get any slower than embeding java there.
NO SIG
i did ruby.. she wasn't that good
No, a stripped-down version of PHP, python, etc would be far better than java.
Does the LAMP crowd write code in java? nope.
Do the DBAs write code in java? nope.
Does the java crowd use mysql? nope (if you're going to the cost of developing apps in java, it makes more sense to use postgresql if not oracle, db2, etc).
In java you can abstract the data persistence thru a variety of encasulation techniques. All of which creates such a mess than everyone's scrambling these days to figure out how to simplify it. Sounds like a mess to introduce deeper into the database.
And portability? Do you really think that java functions created for mysql will port *seamlessly* to postgresql, db2, or oracle? No way. And if they don't - why don't you simply write the functions in a tiny, simplistic language that everyone can use easily?
Welcome back! I've missed your Ninnle posts.
Long live Ninnle!
pg_dump(all) is an export, not a backup.
mysql is not free, unless you give your product that uses it away gpl.
You forgot:
"Java - write once, run everywhere"
Still waiting for Sun made Java that I can DL from Sun for FreeBSD.
That's a joke, right?
MySQL functions written in Java? Sure
MySQL functions written in c/c++? Even better
MySQL functions written in PHP? Cool.
MySQL functions written in pl/sql or pg-pl/sql? Why not? Code compatibility with Oracle and Postgresql.
But Ruby? That would be for a target audience of what? Maybe 10 developers maximum?
I love to get GPLed client libraries, it makes my fscking day. I dumped MySQL a looong ago.
This is purely curiosity on my part:
Addressing point 1: Do you mean you are updating the class file while the JVM is running and you expect it to update the loaded class, or am I misunderstanding here?
..to being an object-relational DBMS.
Bloody hell someone pops a new feature in there and suddenly its the be all and end all. Get over it - MySQL has a long way to go before it gets even close to a lot of commercial DBMS.
Oracle has had this functionality since 8.x. Java is *very* fast inside of Oracle, and is more efficient than PL/SQL in a few cases. Again, OSS is playing catch up.
when have you last time checked Cygwin? They host PostgreSQL binaries for years. Works fine, flawlessly and fast.
Less is more !
Interesting post. Too bad not many people saw it since it was marked down by some idiot moderator. I've been on /. since Oct 98, and the moderators just get worse and worse. It seems like they're intentionally trying to ruin the site. The criteria for moderator points needs to be changed.
So when will someone do Ruby?
Not soon. Ruby cannot be embedded in a threaded application without using a giant mutex. Only one thread at a time can call Ruby interpreter.
It's worth pointing out that the Python implementation may be either disabled or insecure, depending on the python interpreter installed on your system.
The rexec module, which is used by the postgres python code execution handler, has been disabled in Python 2.3 (I'm not sure about 2.4) due to "various known and not readily fixable security holes.
I was initially planning to use python for my postgres stored procedures, but now I'm just using pypgsql and I think I prefer it.
Does this mean that Friendster will render a page in 29 seconds versus 30 now?
Perhaps when there's a Jython-like JVM based Ruby implementation?
Seriously (given the number of ignorant "why use Java it's so slooooow" posts) as far as I can tell the current Ruby implementations are slow compared to Java. Would you really want to use a slow interpreted language for database functions, rather than one with close-to-C performance?
Also on the subject of knee-jerk Java bashing, I can't understand why so many C++ programmers resist Java, tooth and nail. Yes, Java has a somewhat bulky memory footprint (that may not be such a problem going forward with all the new 64-bit architectures out there). However, you get a ton of niceties as well, and a very sane language compared with C++. Java runs very fast these days, given sufficient JVM heap. Gcj is also getting there in terms of being useful, and provides an OSS traditional ahead-of-time compiler for Java code. Java may not be an ECMA standard, but it is open enough to permit free implementations.
Java isn't perfect...but it is better than many of the alternatives, and deserves more respect than it seems to get here on /. and among programmers in general. At least it is well supported on Linux by it's originators, unlike C# and .Net.
OK, time to do something useful now... :-)
Galileo: "The Earth revolves around the Sun!"
Score: -1 100% Flamebait
http://moulon.inra.fr/ruby/plruby.html
See this article: Embedding Perl in MySQL
I did this on a test server -- definite geek factor here.
I'm not seeing any python links on google, but I'm sure someone will speak up if there are.
HOLY CHRIST! What kind of DB files are in excess of 50GB!?!?!?!?! (Or do you meant the whole database?) Our company uses MySQL for a mere 6 million record table, and it works pretty fast. Straight up selects take milliseconds. Joins to that table seem to take forever. (Often in excess of 2 seconds per query.) The fact it isn't thread safe bugged us, but it's easy to make a wrapper class with critical sections. No biggy there. (I think future versions are thread safe though, we're still suck on 4.2) Real world? Seems to work fine. (What's really bizarre is that it actually works better on a Windows 2003 server as opposed to RHL 9.0. Benchmark tests available for those that don't believe me. :-) ).
Oh, not just mine! Ninnle is gaining worldwide popularity!
Feel free to post a Ninnle joke of your own!