Database Stored Procedures.
Storing application code in the database has
had it's champions and detractors. I remain
fairly agnostic on the issue so I?ll try to
discuss both sides. When you start putting
application code in the database, you are in
the thoroughly non-portable arena. That
code, were you to port your application to
another database, would have to be
rewritten. But its very specificity to that
database means it can also take advantage
of, and wire close to that engine. There are
situations where stored code in the database
can be notably faster. Supposed you have to
update some chunk of a million rows after
doing some machinations on the data.
In a stored procedure the data is read,
manipulated, and updated in one step.
Meanwhile if you did the same in your middle
tier application code, you would have to
send that data set over the network, do your
manipulations, and send it back. Not only
would it make this one task slower, but
other transactions vying for that same data
could potentially have to wait while that
data is in transit, and being manipulated.
Also, stored code can serve to encapsulate
specific requests which can be invaluable at
simplifying your overall application. All
three databases support stored procedures
and functions. Oracle also supports
packages, or collections of stored
procedures as well as various object
oriented features, which almost no one ever
uses. An additional note, a database engine
actually context switches between stored
code, and the SQL code embedded therein. As
of 9i, Oracle introduced bulk binding, so
you can do work on large sets of rows, and
update them all in one go, instead of each
loop iteration. This feature can even
further improve performance quite
dramatically.
Database Views.
Views are basically stored queries, and as
such are not overly complex to implement.
However when they are used in a query, they
necessarily make that query more complex. So
obviously, subqueries need to be supported
before Views can become available in a
database. Oracle has obviously had Views for
some time. As of 5.0, MySQL has also
supported views. As with Oracle, MySQL also
supports UPDATEABLE views, with some
restrictions. Postgres also supports views
and UPDATEABLE views. See details in the
Complex SQL section.
Database Materialized Views (snapshots).
These are supported well in Oracle by
default. As a refresher, remember a
materialized view (I prefer the much more
visual snapshot terminology, but I digress)
is a periodically updating copy or subset of
a table. Imagine a view that fills a mirror
copy with its query. Until the next refresh,
that copy is static, not updated with the
master. Usually a tradeoff is made between
frequency of update, and maintenance of the
transaction log (like an index) which
supports it. On paper, MySQL and Postgresql
do not support materialized views, however
there are implementations of this on the
internet, which should fit your needs,
should you go this route and need some
support. A stored procedure creates the
materialized view and another one refreshes
it. In essence a CREATE TABLE my_copy AS
SELECT...
Database Language Integration.
Today, programming web based applications
for various database applications is a truly
egalitarian world. Almost all of the popular
web languages support all of these database
types. Java, PHP, Perl, Python, C#/.NET, etc
etc. The world is your oyster.
Database Triggers
MySQL, Oracle, and Postgres all support
BEFORE & AFTER event triggers on INSERT,
UPDATE and DELETE. Personally I prefer to
shy away from triggers unless absolutely
necessary. They tend to be forgotten about,
and sometimes come back to bite you. When
used sparingly, they can be great though.
Database Security.
All three of these databases have
vulnerabilities. It is truly the nature of
software to have corners with trouble hiding
there. Moreover, all three of them have
regular patches of updates released. My
personal feeling though is that open-source
means that necessarily more eyes, and often
more critical eyes, will be on the code.
What's more, the pressure of the community
is much greater in the open-source world. In
the commercial space, the vendor can, and
often does spin it's wheels when the repair
is more expensive than the perceived cost of
waiting on the fix.
On the point of security inside the
database, all three support password logins
and encryption of various types inside the
database. Oracle does have a newer feature
called virtual private database, where
sections of tables, and columns can be
encrypted, and hidden from view. This can be
very useful for controversial or sensitive
data, that DBAs and other administrators
should not have access to.
Conclusion after Comparison.
Our three database platforms obviously have
a lot of features, and different solutions
for the same problems. In terms of security,
triggers, views, materialized views, and
stored procedures they provide a lot of the
same functionality, though with differences
in terms of performance and configurability.
In part II we'll talk about some of the ways
that the databases really start to differ
significantly, in terms of indexing, but
probably most importantly in their
optimizing engines. |
Webmaster Said:
Thank you.
pochemukers Said: