<?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>TingoDB &#187; Sergey Korotkov</title>
	<atom:link href="http://www.tingodb.com/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tingodb.com</link>
	<description>Embedded Node.js database with MongoDB API</description>
	<lastBuildDate>Fri, 28 Jun 2013 12:00:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Experimental TingoDB driver for Mongoose ODM</title>
		<link>http://www.tingodb.com/updates/experimental-tingodb-driver-for-mongoose-odm/</link>
		<comments>http://www.tingodb.com/updates/experimental-tingodb-driver-for-mongoose-odm/#comments</comments>
		<pubDate>Wed, 26 Jun 2013 14:28:25 +0000</pubDate>
		<dc:creator>Sergey Korotkov</dc:creator>
				<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://www.tingodb.com/?p=164</guid>
		<description><![CDATA[TingoDB API and features designed to be close compatible with MongoDB. As an additional proof for this concept we managed to implement experimental driver for Mongoose.js ODM libary. Work is still in progress, but basic functions work, and we hope to make it usable for real applications. For TingoDB this means that it gets a&#8230; <a href="http://www.tingodb.com/updates/experimental-tingodb-driver-for-mongoose-odm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>TingoDB API and features designed to be close compatible with MongoDB. As an additional proof for this concept we managed to implement <a href="https://github.com/sergeyksv/tungus">experimental driver</a> for Mongoose.js ODM libary. Work is still in progress, but basic functions work, and we hope to make it usable for real applications. For TingoDB this means that it gets a lot of additional tests from complex tool and it will help to improve its quality.</p>
<p>Mongoose claims to be &#8220;Elegant MongoDB object modeling for Node.js&#8221;. Now it can became the same elegant tool but for embedded javascript database.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tingodb.com/updates/experimental-tingodb-driver-for-mongoose-odm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Queries now accept $exists operator</title>
		<link>http://www.tingodb.com/updates/queries-now-accept-exists-operator/</link>
		<comments>http://www.tingodb.com/updates/queries-now-accept-exists-operator/#comments</comments>
		<pubDate>Tue, 25 Jun 2013 13:09:23 +0000</pubDate>
		<dc:creator>Sergey Korotkov</dc:creator>
				<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://www.tingodb.com/?p=159</guid>
		<description><![CDATA[It is trivial thing and we never used it. But others do, and now it is implemented. As usual it fully support indexes where appropriate. $exists operation is available starting from version 0.1.7]]></description>
				<content:encoded><![CDATA[<p>It is trivial thing and we never used it. But others do, and now it is implemented. As usual it fully support indexes where appropriate. $exists operation is available starting from version 0.1.7</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tingodb.com/updates/queries-now-accept-exists-operator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embedded node.js database compatible with MongoDB, isn&#8217;t a joke?</title>
		<link>http://www.tingodb.com/internals/embedded-node-js-database-compatible-with-mongodb-isnt-a-joke/</link>
		<comments>http://www.tingodb.com/internals/embedded-node-js-database-compatible-with-mongodb-isnt-a-joke/#comments</comments>
		<pubDate>Mon, 24 Jun 2013 11:21:42 +0000</pubDate>
		<dc:creator>Sergey Korotkov</dc:creator>
				<category><![CDATA[internals]]></category>

		<guid isPermaLink="false">http://www.tingodb.com/?p=151</guid>
		<description><![CDATA[The short answer is no. It is not a joke, we treat it seriously. So far use of embedded JavaScript databases is kind of risk. There are no mature solutions on the market and one day you might start invest your time into debugging of database engine and not developing of application itself. At least&#8230; <a href="http://www.tingodb.com/internals/embedded-node-js-database-compatible-with-mongodb-isnt-a-joke/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The short answer is no. It is not a joke, we treat it seriously. So far use of embedded JavaScript databases is kind of risk. There are no mature solutions on the market and one day you might start invest your time into debugging of database engine and not developing of application itself.</p>
<p>At least this was our story. Our two years old choice of <a href="http://pgte.github.io/alfred/" target="_blank">AlfredDB</a> was wrong. It looks promising, but as we start to work with real data-sets (&gt;10k of records) it became nightmare. We spent months trying to fix it, but, no luck. The main problem is that buggy database engine prevent us from active development of our main application while it was a priority.</p>
<p>One day we decided that we can&#8217;t get such risks anymore. We decided to switch to MongoDB with goal to complete our application without worrying about bugs in database. Surprisingly migration was not easy. The fact that database uses MongoDB alike query syntax and has find and findOne methods do not means that it is easy to replace it with MongoDB. For those who saw The Pulp Fiction there are too much of little differences &#8211; &#8220;It&#8217;s the little differences. I mean, they got the same shit over there that we got here, but it&#8217;s just&#8230;it&#8217;s just, there it&#8217;s a little different&#8221;.</p>
<p>While one part of team work with application itself and didn&#8217;t worry about database issues another part of team was building embedded database that will be capable to transparently replace Mongodb. It was not easy but if you focus on this from beginning you can do it. First our decision was that we must have good test coverage and all tests must pass both with MongoDB and TingoDB. Looking back, this was very important decision, we was not need to invent something, we just need to reproduce existing functionality.</p>
<p>Once some core functionality was ready we come to idea that we can reuse tests from MongoDB Node.js driver project. It was not easy as well. We discover that original API is designed to be way too flexible. Many functions can work with or without callback. Some functions accept many different parameter combinations. We have surprised to found that <a href="http://mongodb.github.io/node-mongodb-native/api-generated/collection.html#find" target="_blank">find method</a> support 7 different parameter combinations and on every its call there are dozens of code lines that just guess what you actually want to do. To be honest we was upset with that, but now we at least know how to call it to make this code run faster. Also tests verify use of many options or behaviours that we never used in real life and was not aware. No matter what we precisely duplicate all behaviours including exception error messages and even bugs (as we think about them).</p>
<p>Finally with the all efforts spent on embedded database and migration of application code to MongoDB we came to magic moment of marriage of both. On our luck this part was easy, it just worked. Up to now we keep primary app development with MongoDB. The reason for this is that we found this easier: we can use all the lovely MongoDB tools and do not need to worry about possible bugs in database engine. However in parallel we run manual and automatic QA tests using the final configuration with embedded JavaScript database. That&#8217;s our way!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tingodb.com/internals/embedded-node-js-database-compatible-with-mongodb-isnt-a-joke/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TingoDB now support $where clause in searches</title>
		<link>http://www.tingodb.com/updates/tingodb-now-support-where-clause-in-searches/</link>
		<comments>http://www.tingodb.com/updates/tingodb-now-support-where-clause-in-searches/#comments</comments>
		<pubDate>Fri, 14 Jun 2013 17:06:11 +0000</pubDate>
		<dc:creator>Sergey Korotkov</dc:creator>
				<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://www.tingodb.com/?p=88</guid>
		<description><![CDATA[Initially we didn&#8217;t implement it because it is kind of useless for in-proc implementation as you always can do any post filtering with same efficiency. However based on user feedback we decided to implement it for compatibility purposes. The $where clause is available starting from version 0.1.5]]></description>
				<content:encoded><![CDATA[<p>Initially we didn&#8217;t implement it because it is kind of useless for in-proc implementation as you always can do any post filtering with same efficiency.</p>
<p>However based on user feedback we decided to implement it for compatibility purposes.</p>
<p>The $where clause is available starting from version 0.1.5</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tingodb.com/updates/tingodb-now-support-where-clause-in-searches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Index hint option now supported by TingoDB</title>
		<link>http://www.tingodb.com/updates/index-hint-option-now-supported-by-tingodb/</link>
		<comments>http://www.tingodb.com/updates/index-hint-option-now-supported-by-tingodb/#comments</comments>
		<pubDate>Sat, 08 Jun 2013 19:34:29 +0000</pubDate>
		<dc:creator>Sergey Korotkov</dc:creator>
				<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://www.tingodb.com/?p=101</guid>
		<description><![CDATA[While implementing our app we come to situation when multiple indexes on same collection significantly slowdown search. In our example we have collection that store information about financial transactions. To speedup app we need to maintain separate helper collection that holds links between accounts and transaction splits. This helper collection holds account and transaction ids&#8230; <a href="http://www.tingodb.com/updates/index-hint-option-now-supported-by-tingodb/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While implementing our app we come to situation when multiple indexes on same collection significantly slowdown search. In our example we have collection that store information about financial transactions. To speedup app we need to maintain separate helper collection that holds links between accounts and transaction splits. This helper collection holds account and transaction ids with some derivative information like date and sum. It has indexes for both account and transaction ids. During update we use search query that include both ids and by default TingoDB tries to use both indexes. It found ranges and then intersect them. With some experimentation we found that using only single transaction id index can speedup thing a lot. This happens because transactions usually consists from few splits (usually two). So, using only one transaction index to fetch those few records with additional check of account id fields appears to be much faster that using both indexes.</p>
<p>Probably this is good example why MongoDB support search hint option which you can use to point exact index you want to use. So it was easy to add this support and we did it.</p>
<p>Hints option is available in TingoDB since version 0.1.3</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tingodb.com/updates/index-hint-option-now-supported-by-tingodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meet TingoDB, the little JavaScript brother of MongoDB</title>
		<link>http://www.tingodb.com/updates/meet-tingodb-the-little-javascript-brother-of-mongodb/</link>
		<comments>http://www.tingodb.com/updates/meet-tingodb-the-little-javascript-brother-of-mongodb/#comments</comments>
		<pubDate>Fri, 31 May 2013 14:20:38 +0000</pubDate>
		<dc:creator>Sergey Korotkov</dc:creator>
				<category><![CDATA[updates]]></category>

		<guid isPermaLink="false">http://www.tingodb.com/?p=92</guid>
		<description><![CDATA[After about 3 months of work we proud to announce first public release of TingoDB. Module is pushed to npm repository and some initial documentation is ready. So far we successfully integrated it into our application and it works for us the same good as Mongodb. We&#8217;ll call it here, at PushOk Software, little JavaScript&#8230; <a href="http://www.tingodb.com/updates/meet-tingodb-the-little-javascript-brother-of-mongodb/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>After about 3 months of work we proud to announce first public release of TingoDB.</p>
<p>Module is pushed to npm repository and some initial documentation is ready.</p>
<p>So far we successfully integrated it into our application and it works for us the same good as Mongodb.</p>
<p>We&#8217;ll call it here, at PushOk Software, little JavaScript brother of MongoDB.</p>
<p>Take a look, and give it a try <img src='http://www.tingodb.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tingodb.com/updates/meet-tingodb-the-little-javascript-brother-of-mongodb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
