<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blogg - Athega AB &#187; Databaser</title>
	<atom:link href="http://blogg.athega.se/kategori/databaser/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogg.athega.se</link>
	<description>...</description>
	<lastBuildDate>Thu, 18 Nov 2010 22:17:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>MongoDB</title>
		<link>http://blogg.athega.se/2009/07/06/mongodb/</link>
		<comments>http://blogg.athega.se/2009/07/06/mongodb/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 01:50:58 +0000</pubDate>
		<dc:creator>Peter Hellberg</dc:creator>
				<category><![CDATA[Databaser]]></category>
		<category><![CDATA[Kod]]></category>
		<category><![CDATA[Öppen källkod]]></category>
		<category><![CDATA[BSON]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Databas]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://blogg.athega.se/?p=268</guid>
		<description><![CDATA[MongoDB är en blandning av nyckel-värde databas (t.ex. Scalaris), dokumentdatabas (t.ex. CouchDB) och relationsdatabas (t.ex. MySQL). Den är skriven i C++ och passar bra för realtidsanalys av webbstatistik (sidvisningar, unika besökare, osv), Sessionsobjekt, Datacachning och mycket mer. Den har inbyggd replikering, automatisk failover och sharding, hög prestanda och den är open source. Internt så sparas [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="MongoDB - Scalability/Performance - Depth of Functionality" src="http://blogg.athega.se/wp-content/uploads/2009/07/MongoDB-Scalability_Performance-Depth-of-Functionality.png" alt="MongoDB - Scalability/Performance - Depth of Functionality" width="301" height="210" /></p>
<p>MongoDB är en blandning av nyckel-värde databas (t.ex. <a href="http://code.google.com/p/scalaris/">Scalaris</a>), dokumentdatabas (t.ex. <a href="http://couchdb.apache.org/">CouchDB</a>) och relationsdatabas (t.ex. <a href="http://www.mysql.com/">MySQL</a>).</p>
<p>Den är skriven i C++ och passar bra för realtidsanalys av webbstatistik<br />
(sidvisningar, unika besökare, osv), Sessionsobjekt, Datacachning och mycket mer.</p>
<p>Den har inbyggd replikering, automatisk failover och sharding, hög prestanda och den är open source.</p>
<p>Internt så sparas datan i formatet BSON, vilket är JSON med ett datumformat och möjlighet att spara binärdata.</p>
<h2 id="installation">Installation</h2>
<p>Jag kommer som vanligt att använda Mac OS X och Ruby men det finns förkompilerade paket för de vanligaste operativsystemen:</p>
<ul>
<li>OS X 32 bit</li>
<li>OS X 64 bit</li>
<li>Linux 32 bit</li>
<li>Linux 64 bit</li>
<li>Windows 32 bit</li>
<li>Solaris i86pc (EXPERIMENTAL)</li>
</ul>
<p>Det finns även bindningar till ett flertal olika språk, dock har jag inte sett någon för .NET</p>
<ul>
<li><a href="http://www.mongodb.org/pages/viewpage.action?pageId=133409">C++</a> (Inkluderas med databasen)</li>
<li><a href="http://www.mongodb.org/display/DOCS/Java+Language+Center">Java</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/Perl+Language+Center">Perl</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/PHP+Language+Center">PHP</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/Python+Language+Center">Python</a></li>
<li><a href="http://www.mongodb.org/display/DOCS/Ruby+Language+Center">Ruby</a></li>
</ul>
<p>Installationen var helt smärtfri, bara att ladda ner senaste tarbollen (<a href="http://downloads.mongodb.org/osx/mongodb-osx-x86_64-0.9.5.tgz">mongodb-osx-x86_64-0.9.5</a>) och packa upp den på valfri plats.</p>
<p>Man behöver skapa en datakatalog (standard är <code>/data/db</code>) och sen starta servern med</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">./mongod --dbpath [DATAKATALOGEN]</code></p>
<p>Nu lyssnar databasen på port <code>27017</code> och det finns ett webbgränssnitt på port <code>28017</code>.</p>
<p>På Rubysidan behövde jag bara installera paketet <code>mongodb-mongo</code> från <a href="http://github.com/mongodb/mongo/tree/master">GitHub</a> med RubyGems:</p>
<p><code style="padding: 0 0.5em; color: #fff; background-color: #000;">sudo gem install mongodb-mongo</code></p>
<h2 id="dags_fr_lite_kod">Dags för lite kod</h2>
<p>Att ansluta till databasen:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span>
&nbsp;
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mongo'</span>
&nbsp;
db = <span style="color:#6666ff; font-weight:bold;">XGen::Mongo::Driver::Mongo</span>.<span style="color:#9900CC;">new</span>.<span style="color:#9900CC;">db</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;mydb&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>MongoDB har konceptet <code>collections</code> för likartade dokument. (Eller olikartade.. det bestämmer du helt själv) Man kan likna dem vid tabeller.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;"># Hämtar en collection, den skapas om den inte redan finns</span>
coll = db.<span style="color:#9900CC;">collection</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;testCollection&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Man kan stoppa in olika sorters dokument</span>
coll.<span style="color:#9900CC;">insert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Peter&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:address</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:city</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Stockholm&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
coll.<span style="color:#9900CC;">insert</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;Velociraptor&quot;</span>, <span style="color:#ff3333; font-weight:bold;">:top_speed</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;25 m/s&quot;</span>,
              <span style="color:#ff3333; font-weight:bold;">:can</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#123;</span>
                <span style="color:#ff3333; font-weight:bold;">:open_doors</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>,
                <span style="color:#ff3333; font-weight:bold;">:turn_at_any_angle_at_any_velocity</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
              <span style="color:#006600; font-weight:bold;">&#125;</span>
            <span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Man kan sedan hämta ut datat ur databasen med metoden find_first.</span>
peter  = coll.<span style="color:#9900CC;">find_first</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:name</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'Peter'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
raptor = coll.<span style="color:#9900CC;">find_first</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:top_speed</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'25 m/s'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
<span style="color:#008000; font-style:italic;"># Man kan även hämta alla dokument i en collection</span>
coll.<span style="color:#9900CC;">find</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>doc<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">puts</span> doc.<span style="color:#9900CC;">inspect</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h2 id="vidare_lsning">Vidare läsning</h2>
<p>Jag har bara skrapat lite lätt på ytan av allt som går att göra med MongoDB, om du tycker att det verkar intressant så rekomenderar jag följande länkar:</p>
<ul>
<li><a href="http://www.slideshare.net/pengwynn/mongodb-ruby-document-store-that-doesnt-rhyme-with-ouch">MongoDB &#8211; Ruby document store that doesn’t rhyme with ouch</a> (Presentation av Wynn Netherland)</li>
<li><a href="http://mongodb.org">MongoDB</a> (Wiki)</li>
<li><a href="http://en.wikipedia.org/wiki/BSON">BSON-formatet</a> (Wikipedia)</li>
<li><a href="http://twitter.com/mongodb">@mongodb</a> (Twitter)</li>
<li><a href="http://www.10gen.com/">10gen</a> (Företaget som sponsrar utvecklingen)</li>
<li><a href="http://www.mbeckler.org/velociraptors/">Solution to XKCD Velociraptors Problem #2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blogg.athega.se/2009/07/06/mongodb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

