<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Some musings on ORMs</title>
	<atom:link href="http://blog.nelhage.com/2010/07/some-musings-on-orms/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nelhage.com/2010/07/some-musings-on-orms/</link>
	<description>It's software. It's made of bugs.</description>
	<lastBuildDate>Fri, 03 Feb 2012 17:48:35 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Adam Fletcher</title>
		<link>http://blog.nelhage.com/2010/07/some-musings-on-orms/comment-page-1/#comment-2267</link>
		<dc:creator>Adam Fletcher</dc:creator>
		<pubDate>Mon, 19 Jul 2010 13:58:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=278#comment-2267</guid>
		<description>&lt;p&gt;There&#039;s a lot of work in the object database (https://secure.wikimedia.org/wikipedia/en/wiki/Object_database) space that attempts to solve the same problem by not having an ORM layer. &lt;/p&gt;

&lt;p&gt;However, a good RDBMs will have a large cache of commonly accessed data, so in your /places/list/ and /places/detail/ example, if the a user has already queried for /detail/ the performance cost of /list/ will be largely in the network call to the DB &amp; the query parsing because all the I/O will be in-memory (assuming the data isn&#039;t dirty from a write that happened in between the read queries). But scaling a read-heavy database is actually fairly easy, especially if writes can be eventually consistent. The problem is more interesting when you have a write-heavy database with strict ACID needs. &lt;/p&gt;

&lt;p&gt;What ORMs could attempt to do is ongoing, lightweight instrumentation (like a sampling profiler) so the ORM can tell when the query is running very slowly; the problem is that the ORM knows nothing about the physical structure of the database nor anything about were the RDBMs is actually spending time (query parsing? query execution? Block I/O? Block contention?) so the ORM will never be able to optimize away the biggest problems in scaling traditional RDMBs (I/O contention) and the problems in database performance (the aforementioned contention and also query execution). Oracle and other &quot;enterprise&quot; RDBMs spend a lot of time trying to get their query optimizations correct use dynamic analysis, profiling, hints, and other knobs, and they don&#039;t do such a great job at optimization despite all of that data. &lt;/p&gt;

&lt;p&gt;Umm, not sure where I&#039;m going with this. But you should check out object databases, they may be the droids you are looking for.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>There&#8217;s a lot of work in the object database (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Object_database" rel="nofollow">https://secure.wikimedia.org/wikipedia/en/wiki/Object_database</a>) space that attempts to solve the same problem by not having an ORM layer. </p>

<p>However, a good RDBMs will have a large cache of commonly accessed data, so in your /places/list/ and /places/detail/ example, if the a user has already queried for /detail/ the performance cost of /list/ will be largely in the network call to the DB &amp; the query parsing because all the I/O will be in-memory (assuming the data isn&#8217;t dirty from a write that happened in between the read queries). But scaling a read-heavy database is actually fairly easy, especially if writes can be eventually consistent. The problem is more interesting when you have a write-heavy database with strict ACID needs. </p>

<p>What ORMs could attempt to do is ongoing, lightweight instrumentation (like a sampling profiler) so the ORM can tell when the query is running very slowly; the problem is that the ORM knows nothing about the physical structure of the database nor anything about were the RDBMs is actually spending time (query parsing? query execution? Block I/O? Block contention?) so the ORM will never be able to optimize away the biggest problems in scaling traditional RDMBs (I/O contention) and the problems in database performance (the aforementioned contention and also query execution). Oracle and other &#8220;enterprise&#8221; RDBMs spend a lot of time trying to get their query optimizations correct use dynamic analysis, profiling, hints, and other knobs, and they don&#8217;t do such a great job at optimization despite all of that data. </p>

<p>Umm, not sure where I&#8217;m going with this. But you should check out object databases, they may be the droids you are looking for.</p>]]></content:encoded>
	</item>
</channel>
</rss>

