<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8802240102349686129</id><updated>2010-03-10T06:09:30.421-05:00</updated><title type='text'>bigdata®</title><subtitle type='html'>bigdata® is a scale-out storage and computing fabric supporting optional transactions, very high concurrency, and very high aggregate IO rates.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.bigdata.com/blog/atom.xml'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-3733328028706409732</id><published>2010-03-10T06:07:00.001-05:00</published><updated>2010-03-10T06:09:30.468-05:00</updated><title type='text'>Coherent RDF</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Verdana; font-size: 13px; "&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Over the years I have come to realise that few ideas are successful for the reasons they were originally developed.&lt;/div&gt;&lt;br /&gt;Sometimes you just have to ask the question "How did we get here?".&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;What makes XML a success?  Is it down to a unique ability to represent structured data? I think not.  It is more likely because it is a lot like HTML and there have developed a range of available tools to parse and process the format.  Why is HTML a success?  Motivationally because of its de-facto use in markup and the magical result of browsers rendering the documents, but also because it is really easy to do something really simple and then not much harder to do something a little more complicated.&lt;/div&gt;&lt;br /&gt;So what about RDF?  RDF takes a ride on XML acceptance and introduces a triple-based data model.  Where XML provides hierarchical data modelling, RDF provides a simple list of triples (at least theoretically).  With this simplicity comes the problem... interpretation.  XML naturally encapsulates data whilst RDF enables expansion with assertion of disconnected triples.  We must follow a set of rules to interpret the triples to form coherent data structures, and these rules must be understood whenever data is created or accessed.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;With BigData we want to be able to store really large amounts of information with flexible representation.  A triple store provides for the flexibility, but we must be careful not to create complex problems of interpretation.&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;My strong feeling is that too much debate has been focused on RDF syntax and its interpretation.  Instead we should understand that a triple store can flexibly represent data structures and then discover how we are able to represent the data we want to use.&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;So, I am arguing for a general re-appraisal of the approach to building RDF-based applications.  One that essentially defocuses from RDF but is able to leverage the underlying representation when appropriate.&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Is it really the case that we want to make SPARQL queries against RDF data?  Of course, if we do have an underlying RDF representation then such queries could be made, but is this really the goal?  When a developer is tasked with displaying a list of products purchased by a customer, do they want to make a SPARQL query or do they just want the list products?&lt;/div&gt;&lt;br /&gt;Many years ago someone coined the term "impedance mismatch" to describe the problem of transforming data between the format used by a programming language and that used to represent it externally, for example in a database. A figure that I heard repeated was that 90% of computer code was involved with data transformation.  I suspect this figure is now much higher since we no longer have to worry only about data storage transformations but also other representations.  Discussing this recently with respect to RDF the phrase "mother of all impedance mismatches" was coined. We're going to call this MAIM!&lt;br /&gt;&lt;br /&gt;So what does this mean for BigData?  Well, we are aiming to solve MAIM by providing a toolset (interfaces and metadata) that enables the easy creation of domain specific models.  We will use an underlying triple representation augmented with indices to support the efficient access to domain data.  The flexibility of the "schema-free" triple-based representation will enable data sharing between different models/ontologies, while the domain specific metadata will resolve issues of interpretation in defined contexts.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;A key advantage of this approach is that the triple representation and custom indices are driven by the requirement to support access patterns for the domain model.  So, along with solving MAIM, we also hope to save on time spent discussing which RDF representation should be used.&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-3733328028706409732?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/3733328028706409732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=3733328028706409732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3733328028706409732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3733328028706409732'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2010/03/coherent-rdf.html' title='Coherent RDF'/><author><name>Martyn Cutcher</name><uri>http://www.blogger.com/profile/08939607189003418493</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04294754104896033228'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-5517109006087014732</id><published>2010-03-05T16:00:00.003-05:00</published><updated>2010-03-06T10:55:35.453-05:00</updated><title type='text'>We're Hiring</title><content type='html'>Want to get paid to work on bigdata? Know someone who does? We are hiring! Here  is our job listing:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Senior software engineer for parallel semantic web database query optimization.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SYSTAP, LLC is seeking a senior software engineer with experience in the Semantic Web, parallel databases, and distributed systems to help develop bigdata®, a Java-based open-source parallel Semantic Web database capable of running on clusters of 100s or 1000s of machines. SYSTAP has been recognized as a top Semantic Web startup company, and this is an exciting opportunity to work on the core development team of a cutting-edge parallel Semantic Web database product.&lt;br /&gt;&lt;br /&gt;We are looking for immediate help with query rewrite, optimization and distributed query planning. Significant experience is desired in some or all of the following areas: the Semantic Web stack (RDF, OWL), distributed database architectures, query optimization, performance analysis, distributed query planning, view maintenance and caching, datalog, DL reasoners, parallel file systems, and GIS. Programming skills must include Java. Math and/or logic background is a plus. Many core programming (GPU) skills a plus. Active security clearance a plus. Candidate must be self-motivated with good written and verbal communication skills and must able to work independently and from home. Occasional travel required to customer sites and conferences. Competitive salary and benefits. Send cover letter and resume to jobs@systap.com.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-5517109006087014732?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/5517109006087014732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=5517109006087014732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5517109006087014732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5517109006087014732'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2010/03/were-hiring.html' title='We&apos;re Hiring'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-5359738620164960760</id><published>2010-02-22T13:36:00.005-05:00</published><updated>2010-02-24T09:19:00.855-05:00</updated><title type='text'>HA Whitepaper (RFC)</title><content type='html'>We have posted a draft of the bigdata HA white paper online [1].  As part of this effort, we are going to simplify the deployment, configuration and administration of the distributed database.  &lt;br /&gt;&lt;br /&gt;We are planning an initial HA release in 3-4 months.  This is a great time to get us your feedback on features which you would like to see in the HA design, e.g., hooks for monitoring frameworks, etc.  &lt;br /&gt;&lt;br /&gt;You can follow the design discussions on the bigdata-developers mailing list [2].&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.bigdata.com/whitepapers/bigdata_ha_whitepaper.pdf"&gt;Bigdata High Availability Whitepaper&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://sourceforge.net/mailarchive/forum.php?forum_name=bigdata-developers"&gt;Bigdata developers mailing list&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-5359738620164960760?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/5359738620164960760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=5359738620164960760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5359738620164960760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5359738620164960760'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2010/02/ha-whitepaper-rfc.html' title='HA Whitepaper (RFC)'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-176979991229933882</id><published>2010-02-18T06:44:00.002-05:00</published><updated>2010-02-18T06:59:18.817-05:00</updated><title type='text'>HA team</title><content type='html'>We would like to welcome several new members to the bigdata project team, adding a rich mixture of expertise in RDF, distributed systems, storage, deployment and agile methods. Initially we will focus on developing and testing the High Availability architecture for bigdata, with the near-term goal of a very large scale operational deployment of the bigdata quad store with high availability.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-176979991229933882?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/176979991229933882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=176979991229933882' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/176979991229933882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/176979991229933882'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2010/02/ha-team.html' title='HA team'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-5962159842756019711</id><published>2009-11-20T12:21:00.004-05:00</published><updated>2009-11-20T13:02:26.908-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bigdata'/><category scheme='http://www.blogger.com/atom/ns#' term='High Availability (HA)'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Bigdata, HA, and the clouds</title><content type='html'>&lt;p&gt;&lt;span style="font-size:130%;"&gt;Mike and I have been doing some heavy thinking about the High Availability (HA)  architecture for bigdata, and we think that we have a really interesting new  dimension to the total story.  The basic idea is that we are going to decouple  the index read/write service from the distributed file system.  This is going to  change things in a big way.  Here are some for instances:&lt;br /&gt;&lt;br /&gt;- Add or drop  bigdata services based on demand, dynamically changing the throughput for data  write.  This is entirely in line with the notions of cloud and will allow resource sharing on private clouds or pay per use on public clouds.&lt;br /&gt;&lt;br /&gt;- Many machines can serve from the same shard.  This means that we  can hit HPC levels of concurrency for query answering.  We can even partition  the machines so long running queries execute against a dedicated set of hosts  without interfering with normal low latency query processing.&lt;br /&gt;&lt;br /&gt;-  Blindingly fast parallel closure.  There are some new algorithms out there which  describe simple techniques for computing the RDFS closure of each database  partition independently by replicating the "ontology" onto each node.  For  bigdata, this works out as computing the closure for each POS index shard  independently.  Using just these techniques we can probably obtain a 10x  improvement when computing the database closure.  However, by decoupling the  index read/write services from the distributed file system, we can actually put  as much as an entire machine on each POS shard, computing the closure of an  arbitrarily large graph in minutes.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;There are a lot of ways to handle the distributed file system, ranging from refactoring our existing code to produce a custom API, to running over any of the various distributed file systems for commodity hardware, to running over a parallel file system for an HPC cluster, SAN or NAS. Our preference is a distributed file system for commodity hardware because that supports the most reuse across both bigdata and other cloud applications, but the distributed file system must support sync to disk.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Bigdata IO is already highly optimized for both write and read operations.  When we open an index segment, we fully buffer the B+Tree nodes, which are conveniently arranged in a contiguous region in the file.  Likewise, when we read on an index segment, we can go directly to the leaf since the nodes are in memory.  The leaves are double-linked as well, and we have bloom filters in from of the B+Tree as well as record level caching.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;Journal writes are append only, occur at group commit points, and are generally 1 or more megabytes in size.  Still, it might make sense to use a hybrid design where we tie the journal to a data service and use a failover chain for master and secondary data service to absorb writes.  Once we close out the journal, we can blast its 200MB extent directly onto the distributed file system.  Likewise, when reading against a historical commit point, we could &lt;/span&gt;&lt;span style="font-size:130%;"&gt;slurp the corresponding journal onto the machine paired with the shard eliminating any remote IO for small data records on the journal. Cold shards can simply be dropped.  They can be reassigned to data services on an as needed basis and brought back online nearly instantly.  This will allow the number of machines dedicated to bigdata to fluctuate with the demand, which is exactly in keeping with the cloud paradigm.&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:130%;"&gt;This really opens up the possibilities that we see for bigdata  tremendously.  By tossing out the idea that the CPU/RAM of at most a single  machine was available to absorb writes or compute closure, we can gain  tremendous leverage from pooled computational resources.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-5962159842756019711?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/5962159842756019711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=5962159842756019711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5962159842756019711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5962159842756019711'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/11/bigdata-ha-and-clouds.html' title='Bigdata, HA, and the clouds'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-7204281829387431873</id><published>2009-10-28T10:03:00.003-04:00</published><updated>2009-10-28T20:25:16.893-04:00</updated><title type='text'>Parallel materialization of the RDFS closure</title><content type='html'>There were two excellent presentations yesterday at ISWC 2009 on using parallel techniques to materialize the RDFS closure at extremely high rates (for example, the RDFS closure of U8000 in 15 minutes).  This is something that we are going to try out as soon as possible.  Unlike either of the systems described in these papers, bigdata using automatic dynamic sharding based on key-ranges of the data.  These techniques can be adapted by mapping the computation onto the POS index shards, bringing them to fixed point, and then reusing our high-throughput data loader to quickly relocate the entailments onto the distributed indices.  There is clearly a surge in parallel and distributed algorithms for the semantic web, which is extremely exciting.&lt;br /&gt;&lt;br /&gt;[1] Jesse Weaver, James A.  Hendler. &lt;a title="Parallel Materialization of the Finite RDFS Closure for Hundreds of Millions of Triples" href="http://tw.rpi.edu/wiki/Parallel_Materialization_of_the_Finite_RDFS_Closure_for_Hundreds_of_Millions_of_Triples"&gt;Parallel  Materialization of the Finite RDFS Closure for Hundreds of Millions of  Triples&lt;/a&gt;, In Proceedings of the 8th International Semantic Web  Conference, pp. 682--697, 2009.&lt;br /&gt;&lt;br /&gt;[2] Jacopo Urbani, Spyros Kotoulas, Eyal Oren, and Frank van Harmelen.  Department of Computer Science, Vrije Universiteit Amsterdam, the Netherlands, &lt;a href="http://www.eyaloren.org/pubs/iswc2009.pdf"&gt;Scalable Distributed Reasoning using MapReduce&lt;/a&gt;, In Proceedings of the 8th International Semantic Web  Conference, 2009.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-7204281829387431873?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/7204281829387431873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=7204281829387431873' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7204281829387431873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7204281829387431873'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/10/parallel-materialization-of-rdfs.html' title='Parallel materialization of the RDFS closure'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-1285481832990746045</id><published>2009-10-27T09:35:00.004-04:00</published><updated>2009-10-27T09:44:01.565-04:00</updated><title type='text'>Release 0.81b</title><content type='html'>We've just released a new version of bigdata.   This release is capable of loading 1B triples in under one hour on a 15 node cluster and has been used to load up to 13B triples on the same cluster.  JDK 1.6 is required. See [1] for instructions on installing bigdata(R), [2] for the javadoc and [3] and [4] for news, questions, and the latest developments.&lt;br /&gt;&lt;br /&gt;Please note that we recommend checking out the code from SVN using the tag for this release.  The code will build automatically under eclipse.  You can also build the code using the ant script.  The cluster installer requires the use of the ant script.  You can checkout this release from the following URL:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://bigdata.svn.sourceforge.net/svnroot/bigdata/tags/RELEASE_0.81b"&gt;https://bigdata.svn.sourceforge.net/svnroot/bigdata/tags/RELEASE_0.81b&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;New features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for quads.&lt;/li&gt;&lt;li&gt; The B+Tree data record is now the same on the disk and in memory, eliminating de-serialization costs for immutable B+Tree records.&lt;/li&gt;&lt;li&gt;Shared LRU for all B+Tree instances in the same JVM.  This provides competition across those B+Tree instances for RAM.  The LRU is configured by default to use 10% of the JVM heap, but that value may be increased to 20% even on very heavy workloads with large heaps.&lt;/li&gt;&lt;li&gt;Parallel iterator for distributed access paths.&lt;/li&gt;&lt;li&gt;3x improvement in distributed query performance.  We have only just begun to optimize distributed query.  This performance improvement is mainly due to the parallel access path iterator, the shared LRU, and the selection of a better chunk size for distributed query.  We expect substantial improvements in query performance over the next several months.&lt;/li&gt;&lt;li&gt;Some query hotspot elimination.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The roadmap for the next release includes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Full transactions for the SAIL.&lt;/li&gt;&lt;li&gt; Record level compression.&lt;/li&gt;&lt;li&gt; Query optimizations.&lt;/li&gt;&lt;/ul&gt;For more information, please see the following links:&lt;br /&gt;&lt;br /&gt;[1] http://bigdata.wiki.sourceforge.net/GettingStarted&lt;br /&gt;[2] http://www.bigdata.com/bigdata/docs/api/&lt;br /&gt;[3] http://sourceforge.net/projects/bigdata/&lt;br /&gt;[4] http://www.bigdata.com/blog&lt;br /&gt;&lt;br /&gt;About bigdata:&lt;br /&gt;&lt;br /&gt;Bigdata® is a horizontally-scaled, general purpose storage and computing fabric for ordered data (B+Trees), designed to operate on either a single server or a cluster of commodity hardware. Bigdata® uses dynamically partitioned key-range shards in order to remove any realistic scaling limits - in principle, bigdata® may be deployed on 10s, 100s, or even thousands of machines and new capacity may be added incrementally without requiring the full reload of all data. The bigdata® RDF database supports RDFS and OWL Lite reasoning, high-level query (SPARQL), and datum level provenance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-1285481832990746045?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/1285481832990746045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=1285481832990746045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/1285481832990746045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/1285481832990746045'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/10/release-081b.html' title='Release 0.81b'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-7215374463990677149</id><published>2009-10-18T19:25:00.004-04:00</published><updated>2009-10-21T20:55:41.370-04:00</updated><title type='text'>ISWC 2009 : The Semantic Web at Web Scale</title><content type='html'>We will be presenting on Thurs, 10/29, 11:20am - 11:50am at ISWC 2009 in Washington DC.  The talk will cover the bigdata architecture, present performance results on a 15 node cluster, and the bigdata roadmap.  Come on out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-7215374463990677149?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/7215374463990677149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=7215374463990677149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7215374463990677149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7215374463990677149'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/10/iswc-2009-semantic-web-at-web-scale.html' title='ISWC 2009 : The Semantic Web at Web Scale'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-1669157861167269026</id><published>2009-10-01T10:20:00.004-04:00</published><updated>2009-10-18T19:35:28.163-04:00</updated><title type='text'>Quad support for Sesame 2.x</title><content type='html'>&lt;div&gt;We've recently added quad support to bigdata and integrated that support with Sesame 2.x.  There are now three major database modes for RDF data: plain triples, plain triples with provenance (statement identifiers), and quads.  Inference is not supported yet for quads.  We plan to introduce query time inference support instead of eager closure.  &lt;/div&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;The support for quads is in the development branch [1], which you can check out from SVN.  This branch is fairly solid and we plan to create a release from it soon [2].  &lt;br /&gt;&lt;br /&gt;&lt;div&gt;[1] &lt;a href="https://bigdata.svn.sourceforge.net/svnroot/bigdata/branches/BTREE_BUFFER_BRANCH"&gt;https://bigdata.svn.sourceforge.net/svnroot/bigdata/branches/BTREE_BUFFER_BRANCH&lt;/a&gt;&lt;/div&gt;[2] https://sourceforge.net/apps/trac/bigdata/roadmap&lt;br /&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-1669157861167269026?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/1669157861167269026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=1669157861167269026' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/1669157861167269026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/1669157861167269026'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/10/quad-support-for-sesame-2x.html' title='Quad support for Sesame 2.x'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-5206371227758329659</id><published>2009-08-19T19:33:00.005-04:00</published><updated>2009-09-21T19:49:50.751-04:00</updated><title type='text'>B+Tree compression and buffering</title><content type='html'>We've been working on big performance improvements for the B+Tree. The goal is to drastically increase the amount of data that bigdata(R) can buffer in memory so we can really take advantage of those 64-bit JVMs while making search faster, reducing the in-memory footprint and GC churn, and reducing the network size of RMI payloads.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;First, we have a new binary image for the B+Tree nodes and leaves with pluggable compression schemes that support search and value retrieval directly on the coded (compressed) representation. This will reduce the footprint for data on the disk, in memory, and on the wire and should boost search performance. We will roll out with prefix-compression (front-coding) for keys and with canonical huffman encoding options for keys and values. These compression schemes all based on fastutils[1] and dsiutils[2], which are fantastic libraries.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Second, we are moving away from a per-B+Tree buffer for persistent leaves and nodes to a shared buffer using a mixture of a LRU and a hash map with weak reference values. Combined with the smaller in-memory footprint for leaves and nodes, this will allow bigdata(R) to buffer vastly more data in RAM.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finally, we are examining options for record-level compression to reduce the on disk footprint even further. Our thinking here is to offer a pluggable scheme, with initial support for Deflate, zip, gzip and bmz[3]. We are already coding (compressing) the keys and values, but there is an additional win to be had from a fast compression pass over the entire B+Tree node or leaf. Most compression libraries are accessed via JNI and will generally do better on larger records, so we may wind up increasing the default branching factor for the index segments to compensate. You should be able to choose a record level compression provider for the Journal, another for the index segments, and have the option to specify the compression provider separately for all shards for a specific index. Different compression schemes make sense for the journal and the index segments because the journal is geared towards fast write absoption while the index segments are geared towards read-only data. Likewise, some indices may derive more benefit from specific compression schemes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We should have some new performance results based on these changes in a few weeks.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://fastutil.dsi.unimi.it/"&gt;http://fastutil.dsi.unimi.it/&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://dsiutils.dsi.unimi.it/"&gt;http://dsiutils.dsi.unimi.it/&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://www.hypertable.org/doxygen/dir_636d9f0bc773a215f705e2de9f182c4e.html"&gt;http://www.hypertable.org/doxygen/dir_636d9f0bc773a215f705e2de9f182c4e.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-5206371227758329659?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/5206371227758329659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=5206371227758329659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5206371227758329659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5206371227758329659'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/08/btree-compression-and-buffering.html' title='B+Tree compression and buffering'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-6661788169584509697</id><published>2009-08-04T15:19:00.003-04:00</published><updated>2009-08-20T17:19:36.881-04:00</updated><title type='text'>"Mapped" RDF data loader</title><content type='html'>We've just introduced a new "mapped" data loader. The previous data loader assumed that the files were located on specific hosts in a known directory. This was designed map/reduce task in mind, where the RDF files were being dumped into the local directory by the reduce task.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;With the mapped data loader you specify a scanner which is executed by the master. The default scanner knows how to identify files to be processed in file system, but it would be easy enough to write a scanner that consumed an HDFS block structured file whose contents were RDF data. This is more like the "map" stage of a map/reduce job, which is why we call it the "mapped" data loader. Regardless of how the scanner identifies the resources to be processed, the master "maps" those resources across client tasks running on the cluster.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Let us know if you are interested in loading data from HDFS or a hadoop map/reduce jobs into a massive distributed semantic web graph and we can help you work through the integration glue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-6661788169584509697?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/6661788169584509697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=6661788169584509697' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/6661788169584509697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/6661788169584509697'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/08/mapped-rdf-data-loader.html' title='&quot;Mapped&quot; RDF data loader'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-7284354341430549792</id><published>2009-07-27T11:40:00.001-04:00</published><updated>2009-07-27T11:40:59.697-04:00</updated><title type='text'>Who should use bigdata?</title><content type='html'>It can be confusing to navigate the various triple store options out there.  Which one is best for your application?  &lt;br /&gt;&lt;br /&gt;Let’s take a step back and look at the history of bigdata.  Bigdata was not developed in a vacuum.  Bryan and I were building a system for an intelligence community customer that used a triple store as the core of the data layer.  This system allowed users to federate and semantically align different structured and unstructured data sets into a single fused view for better analysis.  The system had a triple store knowledge base at the data layer, and then user-facing tools that allowed analysts to do things like import structured data, send unstructured documents through a harvest/extract pipeline, search for documents and entities, view graphical link charts, annotate documents, and a host of other things.  The system also had an open RESTful service API, which allowed other tools to access the knowledge base to do reads, writes, and queries.  The system was multi-user, so it had to handle real-time updates and deletes with concurrent queries.  The knowledge base had to be fast enough to keep up with system load and scalable enough to handle lots of data.  RDF was a great technology choice for the problem, but we found the RDF database implementations a bit lacking or a bit expensive, or both.  And no vendor was tackling scale-out at that time.  This was also around the time of Google’s publication on BigTable, and we thought, can we apply these fundamental concepts to RDF data?&lt;br /&gt;&lt;br /&gt;Bigdata is not just for applications with multi-billion triple requirements.  The single-server version of bigdata is an excellent choice for any system that needs a triple-store, it’s robust, fast, and handles concurrency very well.  Bigdata handles real-time updates and deletes with incremental inference and incremental truth maintenance.  Concurrent writes are serialized, but in the system for which we designed bigdata, these updates and deletes of about 10-1000 triples were absorbed almost instantly.  Meanwhile bigdata’s MVCC concurrency model allows readers to operate totally independently of writers and other readers, so there’s never any waiting for reads or queries to execute.  And when they do execute, they go through bigdata’s high-performance join engine for lightning fast query response times.&lt;br /&gt;&lt;br /&gt;If you are dissatisfied with the performance, robustness, or feature-completeness of your current triple store (as we were), then look no further.  Bigdata was borne of the same dissatisfaction, and designed and implemented specifically for real-world systems like yours.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-7284354341430549792?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/7284354341430549792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=7284354341430549792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7284354341430549792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7284354341430549792'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/07/who-should-use-bigdata.html' title='Who should use bigdata?'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-4100543362160745920</id><published>2009-07-09T17:08:00.002-04:00</published><updated>2009-07-09T17:21:35.288-04:00</updated><title type='text'>getting started with bigdata</title><content type='html'>A couple of steps forward to help get started with bigdata.&lt;br /&gt;&lt;br /&gt;We've published an early draft of a bigdata architecture whitepaper[1].  It's a work in progress as you'll be able to tell by reading it.&lt;br /&gt;&lt;br /&gt;Also, we've started sketching out the getting started guide for scale-out on the wiki[2].  We still recommend keeping us involved in the process if you're interested in trying out bigdata on a cluster.  There are a lot of do's and dont's when it comes to configuring and writing performant code for a distributed database.  What this guide is currently missing is sample code for distributed data load and query.  Keep an eye out for this in the next few days.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.bigdata.com/whitepapers/bigdata_whitepaper_07-08-2009.pdf"&gt;Whitepaper&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://bigdata.wiki.sourceforge.net/"&gt;Wiki&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-4100543362160745920?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/4100543362160745920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=4100543362160745920' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/4100543362160745920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/4100543362160745920'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/07/getting-started-with-bigdata.html' title='getting started with bigdata'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-6451848551798253887</id><published>2009-07-07T08:15:00.005-04:00</published><updated>2009-07-07T09:39:45.516-04:00</updated><title type='text'>bigdata, OWL, SWRL</title><content type='html'>Now that bigdata is handling billions of triples with ease, we are ready to venture into higher expressivity as well. There is always a tradeoff between the expressiveness of the ontology and the computational complexity of computing the entailments. So far, bigdata has focused on the &lt;em&gt;data scale&lt;/em&gt;, now we are ready to look at the &lt;em&gt;reasoner complexity&lt;/em&gt;. To do this we are exploring some integration options, including partnering with Clark &amp;amp; Parsia to develop an integration with the Pellet2 OWL reasoner [2].&lt;br /&gt;&lt;br /&gt;Speak out and let us know what combination of data scale and ontology complexity &lt;em&gt;you&lt;/em&gt; need. Do you want datalog [1], OWL2 profiles (RL, QL, EL)[3], Horn-SHIQ[4]? Do you need SWRL [5], and how you want to use it? Example ontologies, data scale and use caselets would all help.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://www.iris-reasoner.org/"&gt;http://www.iris-reasoner.org/&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://clarkparsia.com/pellet/"&gt;http://clarkparsia.com/pellet/&lt;/a&gt;&lt;br /&gt;[3] &lt;a href="http://www.w3.org/TR/owl2-profiles/"&gt;http://www.w3.org/TR/owl2-profiles/&lt;/a&gt;&lt;br /&gt;[4] &lt;a href="http://logic.aifb.uni-karlsruhe.de/wiki/Horn-SHIQ"&gt;http://logic.aifb.uni-karlsruhe.de/wiki/Horn-SHIQ&lt;/a&gt;&lt;br /&gt;[5] &lt;a href="http://www.w3.org/Submission/SWRL/"&gt;http://www.w3.org/Submission/SWRL/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-6451848551798253887?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/6451848551798253887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=6451848551798253887' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/6451848551798253887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/6451848551798253887'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/07/bigdata-owl-swrl.html' title='bigdata, OWL, SWRL'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-5660796574890130761</id><published>2009-06-29T18:23:00.001-04:00</published><updated>2009-06-29T18:24:34.535-04:00</updated><title type='text'>come be our fan on Facebook</title><content type='html'>The title says it all really.  Just search for our bigdata page on FB.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-5660796574890130761?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/5660796574890130761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=5660796574890130761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5660796574890130761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5660796574890130761'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/06/come-be-our-fan-on-facebook.html' title='come be our fan on Facebook'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-6962044397370587561</id><published>2009-06-26T13:14:00.001-04:00</published><updated>2009-06-26T13:17:59.267-04:00</updated><title type='text'>version 0.8 beta</title><content type='html'>We are happy to announce the release of version 0.8 beta on Sourceforge.  This release packages both the scale-out (distributed) and scale-up (single-server) versions of the bigdata RDF store.  This release is capable of loading 1B triples in well under one hour on a 15 node cluster and has been used to load up to 13B triples on the same cluster.  It also captures substantial improvements in the scale-out architecture.  While query performance has not been optimized recently, it is nevertheless quite reasonable.&lt;br /&gt;&lt;br /&gt;We’ve also dramatically improved our Getting Started Guide[1] and have included plenty of sample code in the bigdata-sails module[2].  This guide and sample code is for the scale-up version, we will have a similar guide with sample code for the scale-out version forthcoming.  In the meantime, we are happy to assist directly.&lt;br /&gt;&lt;br /&gt;We are also currently working on a comprehensive whitepaper describing the bigdata scale-out architecture.  We will post a link to that as soon as possible.&lt;br /&gt;&lt;br /&gt;[1] &lt;a href="http://bigdata.wiki.sourceforge.net/GettingStarted"&gt;http://bigdata.wiki.sourceforge.net/GettingStarted&lt;/a&gt;&lt;br /&gt;[2] &lt;a href="http://bigdata.svn.sourceforge.net/viewvc/bigdata/trunk/bigdata-sails/src/samples/com/bigdata/samples/"&gt;http://bigdata.svn.sourceforge.net/viewvc/bigdata/trunk/bigdata-sails/src/samples/com/bigdata/samples/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-6962044397370587561?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/6962044397370587561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=6962044397370587561' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/6962044397370587561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/6962044397370587561'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/06/version-08-beta.html' title='version 0.8 beta'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-4483838175561289197</id><published>2009-06-23T10:05:00.008-04:00</published><updated>2009-06-23T10:43:45.746-04:00</updated><title type='text'>Enterprise ready scale-out?</title><content type='html'>People have been inquiring whether the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;bigdata&lt;/span&gt; scale-out architecture is enterprise ready, and, if not, what it would take to get there. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Bigdata&lt;/span&gt;, as a scale-up platform, has been in operational use for years, but this is still an early adopter phase for the scale-out architecture. What follows is an overview of some enterprise features and their current state of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;readiness&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;If you need some feature that is not finished yet, consider getting involved or helping out by funding feature development. We can tackle any of these issues within a few months.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Datalog&lt;/span&gt; support for query time inference.&lt;/strong&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;Bigdata&lt;/span&gt; has an efficient internal rule execution model. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;SPARQL&lt;/span&gt; queries are translated into the internal rule model and then executed using distributed joins. Some &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;entailments&lt;/span&gt; are computed at query time, but generalized query time inference requires a rewrite of the query and the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;RDF&lt;/span&gt;(S)+ entailment rules into a minimum effort program which computes exactly those &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;entailments&lt;/span&gt; required to answer the query. This is done using a magic sets integration.&lt;br /&gt;&lt;br /&gt;Status: Early development.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Transactional semantics.&lt;/strong&gt; In order to have a semantic web database which is used as a transactional system at scale you must either use NO inference (just triples) or use query time inference rather than eager materialization of the triples. The issue is that eager materialization of inferences requires the total serialization of all transaction commits, which would be an unacceptable performance bottleneck regardless of the rest of the architecture. Either way, the semantics become those of the underlying database concurrency control algorithm, which in this case is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;MVCC&lt;/span&gt;. Further, in order to avoid race conditions for the lexicon (the mapping from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;RDF&lt;/span&gt; Values, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;URIs&lt;/span&gt;, Literals, and blank nodes, onto internal 64-bit unique identifiers) we use an ACID, but non-transactional, consistent write strategy. This guarantees a consistent mapping of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;RDF&lt;/span&gt; Values onto internal identifiers without limiting concurrency.&lt;br /&gt;&lt;br /&gt;Status: Read-only transactions are done and are used to support high-level query. Full distributed read-write transaction support is mostly finished, but we are still working on the distributed commit protocol. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;MVCC&lt;/span&gt; is fully supported in the data services and the indices.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Concurrency Control.&lt;/strong&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;Bigdata&lt;/span&gt; uses Multi-Version Concurrency Control. We timestamp all &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;tuples&lt;/span&gt; in the indices. Transactional commits identify write-write conflicts based on those timestamps. If the timestamp has been changed since the ground state from which the transaction is reading, then there is a write-write conflict. For &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;RDF&lt;/span&gt;, we can reconcile write-write conflicts. The typical situation is that two transactions both write the same triple on the database. This is normally not viewed as a conflict since the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;RDF&lt;/span&gt; data is not typically used to establish ad-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;hoc&lt;/span&gt; locking protocols! Further, if we are using either query-time or NO inference, then there is no value associated with the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;tuples&lt;/span&gt; in the statement indices. All of the information is captured by the key. Write-write conflicts do arise, but only when some statements are being retracted.&lt;br /&gt;&lt;br /&gt;Status: Done.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Locking.&lt;/strong&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;MVCC&lt;/span&gt; does not utilize locks for concurrency control. Instead, it does validation during the commit protocol as described above. We do support synchronous distributed locks through an integration with zookeeper, but that is not part of the concurrency control architecture.&lt;br /&gt;&lt;br /&gt;Status: Done.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HA architecture.&lt;/strong&gt; There are two alternatives here. The data service (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;DS&lt;/span&gt;) is the container for the index partitions (key-range shards). There are logical data services and physical data services. Clients always write on the master &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;DS&lt;/span&gt; for a given logical &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;DS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Alternative 1.&lt;/em&gt; Clients can read from any physical &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;DS&lt;/span&gt; for a given logical &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;DS&lt;/span&gt;. Storage can be on either local disk or SAN/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;NAS&lt;/span&gt;. Local disk is acceptable for this alternative because the data are replicated across multiple machines, which provides built in media redundancy. The master (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;DS&lt;/span&gt;) pipelines writes to a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;failover&lt;/span&gt; chain of k secondary &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;DS&lt;/span&gt;. That pipeline is flushed during the commit protocol by the master &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;DS&lt;/span&gt;. The commit succeeds once the writes are on stable storage on the master and the secondaries or fails and is rolled back. If the master fails, then the 1st secondary is elected as the new master. We handle master election using zookeeper. Zookeeper was developed by Yahoo! as a distributed lock and configuration management service and is now an Apache &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;subproject&lt;/span&gt; (part of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Hadoop&lt;/span&gt;). Among other things, it gets master election protocols right.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Alternative 2.&lt;/em&gt; Storage is a shared volume (SAN/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;NAS&lt;/span&gt;). The secondaries &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;DS&lt;/span&gt; are registered but inactive until the master fails, at which point the 1st secondary in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;failover&lt;/span&gt; chain re-opens the same persistence store from the service directory on the SAN/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;NAS&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Status: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;Failover&lt;/span&gt; has not been implemented. Alternative 2 is the easiest to realize and many organizations &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;perfer&lt;/span&gt; to manage storage separately from servers. Alternative 1 probably has the best price/performance for deployments since it can use local disk.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Backup and recovery.&lt;/strong&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;Bigdata&lt;/span&gt; uses a log structured store known as a "journal" to buffer writes. Periodically, the journal will reach its nominal capacity of ~200 MB. At that point, there is an atomic &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;cutover&lt;/span&gt; ("synchronous overflow") to a new journal and an asynchronous overflow process migrates the buffered writes onto read-optimized B+Tree files ("index segments"). Backup therefore entails copying the index segments, the current (live) journal, and the previous journal (to capture the buffered writes). The best time to do a backup is during the atomic &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;cutover&lt;/span&gt; to the new journal. At that point, write activity on the journal is suspended and it may be snap-copied. In fact, the copy operation only needs to be protected for the root blocks, which are the first page of the journal on the disk. A backup protocol could be integrated into synchronous overflow processing with very low overhead. Backup must also capture new index segments are they are generated, so there is a second integration point for that (the 1st HA strategy already requires the synchronous propagation of index segments to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;failover&lt;/span&gt; data services).&lt;br /&gt;&lt;br /&gt;Offline recovery is a matter of restoring the persistent state of the services and re-starting the services. Service (re-)start is quite fast, but a total database recovery would not be a fast operation.&lt;br /&gt;&lt;br /&gt;Lightweight recovery of data with has been overwritten by transactions that you need to rollback may be achieved using the history retention policy. When you configure a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;bigdata&lt;/span&gt; federation, you can specify the minimum retention age for historical commit points. This can be hours, days, or weeks. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;Bigdata&lt;/span&gt; will not release those commit points until their retention age has expired. This makes it possible to perform correcting actions which bring the database back into a desired state. It would be quite feasible to develop a feature where the database was rolled back to a historical commit point and transactions could then be selectively reapplied from a log.&lt;br /&gt;&lt;br /&gt;Status: Not implemented yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-4483838175561289197?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/4483838175561289197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=4483838175561289197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/4483838175561289197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/4483838175561289197'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/06/enterprise-ready-scale-out.html' title='Enterprise ready scale-out?'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-5865389436803227949</id><published>2009-06-19T15:40:00.006-04:00</published><updated>2009-06-19T16:36:34.855-04:00</updated><title type='text'>Incremental data load and query performance</title><content type='html'>We have been getting some questions about incremental data load and query performance. Let me tackle both issues here.&lt;br /&gt;&lt;br /&gt;With &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;RDFS&lt;/span&gt;+ databases, there is always a trade off in when you materialize the statements entailed by the combination of the data and the ontology. This can be done eagerly, when the data are loaded into the database, or on demand, when a query is issued. Eager materialization (also known as eager closure) has advantages for some situations, but implies more latency between when you data are stable on the database and when the database can answer queries based on the new data and also takes up more space on the disk. The alternative is query-time inference, but the downside is that you must do more work to answer the query. In practice, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;bigdata&lt;/span&gt;, like most &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RDF&lt;/span&gt; databases, does a little bit of both -- materializing some statements during data load and others dynamically during query.&lt;br /&gt;&lt;br /&gt;One of the next features that we will introduce is a magic sets integration. This will allow us to compute more of the inferences at query time using a minimum cost "program". The magic sets rewrite of the query is basically the original query, plus the entailment rules which were not materialized, plus a bunch of "gates" which prevent those rules from firing unless they are specifically required to answer the query, and even then they are fired with bindings which constrain their scope to exactly the necessary data. This integration will let us offer more flexible inference mechanisms and will give us another alternative for handling truth maintenance (when statements are retracted from the database).&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Bigdata&lt;/span&gt; is an Multi-Version Concurrency Control (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;MVCC&lt;/span&gt;) architecture. This means that readers never block. You can use a read-only transaction to place a read-lock on a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;pre&lt;/span&gt;-materialized view of the data plus any entailment rules which are eagerly materialized. Clients can then read from that view while you add (or remove) statements to (from) the database. Once the closure of the database has been updated, you can simply update the view from which the clients are reading and they will immediately begin to read against the new state. These updates can be small and fast, or they can be massive. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Bigdata&lt;/span&gt; simply does not care. However, if you are using eager closure then small incremental data loads will be quite fast while larger loads will take more time to update the materialized statements, but are generally more efficient. In practice, if you have a lot of small updates, it may be better to multiplex them together for more throughput -- but this depends on your application. However, clients are still reading from your last consistent view so the update is atomic from their perspective.&lt;br /&gt;&lt;br /&gt;"Historical states" are views which have been &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_7"&gt;superseded&lt;/span&gt; by subsequent commits. Historical state is retained automatically for open transactions. In fact, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;bigdata&lt;/span&gt; can be configured as an &lt;em&gt;immortal&lt;/em&gt; database, where &lt;em&gt;all &lt;/em&gt;history is preserved, if you have the disk and the requirement for that capability. More commonly, you will configure the minimum age that historical state must be retained, say 1 day, and older data is gradually purged to reclaim disk space. This all happens transparently during what we call "overflow" processing -- you never have to "&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;vacuum&lt;/span&gt;" the database. When we cite high throughput like 300k triples per second or 1B triples in an hour, that is with ongoing overflow processing and dynamic index partitions partitions.&lt;br /&gt;&lt;br /&gt;Query performance is quite good -- and we are looking forward to giving everyone some hard numbers real soon now. Query performance on a single machine is comparable to the best commercial triples stores. Query performance on a cluster varies between 2x faster and roughly equal to the best commercial triple stores running on a single machine. So, we are not loosing any performance by running a distributed database, not even for small queries. We are going to wrap up soon with the work we have been doing on data load throughput and then turn back to query performance optimization. While query performance on a cluster right now is good, we made some changes in how data is distributed across a cluster in order to achieve higher write rates and now we need re-optimize distributed query performance.   In fact, I expect query performance will improve substantially when we do this, which is why we are not quoting numbers at this time.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Bigdata&lt;/span&gt; has a lot of advantages for query processing. For example, readers are non-blocking (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;MVCC&lt;/span&gt;) and can run concurrently, bloom filters are available at each index partition (aka key-range shard), so they can be applied to very large data sets efficiently, and we incrementally optimize the data sets by migrating buffered writes from a log-structured store onto read-optimized B+Tree segments. Overall, the scale-out architecture allows us to apply vastly more resources to query processing when compared with any single host solution.&lt;br /&gt;&lt;br /&gt;We are working on a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;whitepaper&lt;/span&gt; in which we will publish on the scale-out architecture, data load throughput, and query performance on a cluster. We are using synthetic data sets for this, but if you have a lot of data and queries, contact us -- we'd be happy to run the numbers on your data!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-5865389436803227949?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/5865389436803227949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=5865389436803227949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5865389436803227949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/5865389436803227949'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/06/incremental-data-load-and-query.html' title='Incremental data load and query performance'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-2035616679417144213</id><published>2009-06-16T17:15:00.008-04:00</published><updated>2009-06-16T17:55:24.004-04:00</updated><title type='text'>Scale-up or scale-out?</title><content type='html'>Scale-up or scale-out?  You can scale-up to larger and larger problems by buying a machine with more RAM, or by buying an even fancier machine with a dozens of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;CPUs&lt;/span&gt; and a huge amount of RAM.  However, you &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;swifly&lt;/span&gt; reach the limits of what is practical (the former) or cost-effective (the latter).  Commodity hardware is &lt;em&gt;cheap&lt;/em&gt; and scale-out approaches let you make the most of it.&lt;br /&gt;&lt;br /&gt;Bigdata loads 300,000 triples per second on a commodity cluster.  1,000,000,000 triples loaded in under an hour.  You can not touch performance like that on a single machine for anything near the same cost.  And it is not just the CPU and the increased RAM, but the parallel DISK IO that comes along with the architecture.  And when one machine fails, you just &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;failover&lt;/span&gt;.  If you have sunk all those resources into a single (very) high end server and it goes down, well, you are just out of luck.  Bigdata is a fully persistent architecture.  Service restart time is well under a second and your data is available immediately, not re-loaded from a log file.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;Bigdata&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;architected&lt;/span&gt; to be highly concurrent.  Most databases limit you to one writer, or to one writer on an index.  In &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;bigdata&lt;/span&gt;, we transparently and dynamically break down scale-out indices into &lt;em&gt;key-ranges &lt;/em&gt;called &lt;em&gt;index partitions&lt;/em&gt; (shards, really) and each writes on each &lt;em&gt;index partition&lt;/em&gt; run concurrently.  This means that the potential concurrency of the application &lt;em&gt;grows&lt;/em&gt; with the data scale.   And since we dynamically partition the data, you can always add more hardware to keep pace with your data size or your query demands &lt;em&gt;without&lt;/em&gt; having to reload all your data.&lt;br /&gt;&lt;br /&gt;We are still working on query performance tuning, but we have already seen query response times which are &lt;em&gt;better&lt;/em&gt; than the best scale-up triple stores.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Bigdata&lt;/span&gt; distributes the query processing across the hardware, doing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;JOINs&lt;/span&gt; right at the data and it uses MVCC (Multi-Version Concurrency Control), so we run concurrent read-consistent queries without blocking.  It is able to put more CPU, more RAM and more DISK bandwidth on any given problem when compared to any single machine.&lt;br /&gt;&lt;br /&gt;Oh,  it runs on a single machine too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-2035616679417144213?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/2035616679417144213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=2035616679417144213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/2035616679417144213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/2035616679417144213'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/06/scale-up-or-scale-out.html' title='Scale-up or scale-out?'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-7634055991010414688</id><published>2009-05-29T12:55:00.004-04:00</published><updated>2009-06-12T14:29:31.559-04:00</updated><title type='text'>Scaling limits? No where in sight.</title><content type='html'>Some people have been asking about scaling limits for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;bigdata&lt;/span&gt;. We have run out to 10B triples in a single semantic web database instance, and we are producer bound for most of that. By the time we are nearing 10B, the producers have been at maximum CPU utilization for hours while the database servers are at perhaps 35-40% utilization.&lt;br /&gt;&lt;br /&gt;So, what is limiting us right now is the single machine capacity for the producer. As the number of index partitions grows over time, the producer needs to allocate the data to be written onto the index into more and more buffers (one per index partition). As we get into 100s of index partitions, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;RDF&lt;/span&gt;/XML parsers are running full blast into those buffers without putting an appreciable load onto the database.&lt;br /&gt;&lt;br /&gt;To get around the single machine limit for the producers, we are going to refactor the clients so that they have an aggregation stage, similar to, but somewhat different from, a reduce phase. That will allow us to run enough &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;RDF&lt;/span&gt;/XML parser clients to feed the system and sustain high throughput well past 10B triples.&lt;br /&gt;&lt;br /&gt;Since we can scale by adding hardware, even after a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;bigdata&lt;/span&gt; federation has been deployed, the practical scaling limit for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;bigdata&lt;/span&gt; is going to be at least another order of magnitude (100B).&lt;br /&gt;&lt;br /&gt;Update: We have since resolved the bottleneck mentioned in the original post without the introduction of an aggregator phase. The problem was traced to some POS index queues in the clients which were being filled with small chunks due to a systematic presentation of specific predicates once per document. Those chunks are now automatically combined on insertion into the queue, which solved the problem -- at least at this scale!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-7634055991010414688?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/7634055991010414688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=7634055991010414688' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7634055991010414688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/7634055991010414688'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/05/scaling-limits-no-where-in-sight.html' title='Scaling limits? No where in sight.'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-8037786458846655470</id><published>2009-05-21T13:30:00.004-04:00</published><updated>2009-05-21T13:38:05.766-04:00</updated><title type='text'>Semantic Technologies Conference 2009</title><content type='html'>Please come see my presentation at the &lt;a href="http://www.semantic-conference.com/"&gt;Semantic Technologies Conference&lt;/a&gt; in San Jose on June 18th.  I'll be discussing the use of bigdata and RDF for large-scale mashups.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.semantic-conference.com/"&gt;&lt;img style="cursor: pointer; width: 200px; height: 121px;" src="http://www.semtech2009.com/2009/images/PartnerButtons/PartnerButtons_GIF/WeAreSpeaking.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-8037786458846655470?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/8037786458846655470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=8037786458846655470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/8037786458846655470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/8037786458846655470'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/05/semantic-technologies-conference-2009.html' title='Semantic Technologies Conference 2009'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-3140554155773342181</id><published>2009-05-21T13:22:00.003-04:00</published><updated>2009-05-21T13:30:03.481-04:00</updated><title type='text'>more results from the cluster - 5 billion triples</title><content type='html'>The gods have smiled upon us and given us a bit more time on this cluster.&lt;br /&gt;&lt;br /&gt;It seems that Bryan has the RAM problem on the clients solved - they are no longer swapping.  This has let us run out to a different problem - RAM demands on the data services.   :-)&lt;br /&gt;&lt;br /&gt;Good progress though, last night's run yielded 5 billion triples loaded in just under 10 hours for an average throughput of 135k triples per second.   Max throughput was just above 210k triples per second.  1 billion triples was reached in an astonishing 78 minutes.&lt;br /&gt;&lt;br /&gt;Configuration was 20 data services (10 blades with 2 data services each), 8 client services (4 blades with 2 each), and one blade for centralized services.&lt;br /&gt;&lt;br /&gt;Note that these times are for simple RDF load - no closure.  Previous tests have demonstrated that closure takes about as long as simple load - so double the time and halve the throughput to get our numbers with closure.   Still quite impressive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-3140554155773342181?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/3140554155773342181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=3140554155773342181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3140554155773342181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3140554155773342181'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/05/more-results-from-cluster-5-billion.html' title='more results from the cluster - 5 billion triples'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-3317219171838800172</id><published>2009-05-05T16:25:00.002-04:00</published><updated>2009-05-05T16:48:36.807-04:00</updated><title type='text'>1 billion triples in 97 minutes</title><content type='html'>With only two days left on the cluster we are really starting to feel under the gun!  This afternoon's trial run is producing some exciting results though.  Asynchronous writes on the TERM2ID index has produced a nice boost in throughput - we just crossed 1 billion triples loaded in 97 minutes, that is a hefty 173,000 triples per second.  We are making a few more tweaks while this trial is running and will probably start a new run later in the evening in the hopes of crossing the 200,000 triples per second barrier.  More to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-3317219171838800172?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/3317219171838800172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=3317219171838800172' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3317219171838800172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3317219171838800172'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/05/1-billion-triples-in-97-minutes.html' title='1 billion triples in 97 minutes'/><author><name>Mike Personick</name><uri>http://www.blogger.com/profile/04402560349531330364</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='13047470444360857963'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-2411059422694701715</id><published>2009-05-02T10:08:00.003-04:00</published><updated>2009-05-02T10:14:44.586-04:00</updated><title type='text'>100,000 triples-per-second to 3B triples</title><content type='html'>At this point, we have run out to 3B triples on a cluster with a net throughput of more than 100,000 triples per second for the cluster.  The per-machine throughput is now ~ 10,000 triples per second.  We have also addressed a high memory demand issue in the data services which was leading to premature RAM exhaustion. &lt;br /&gt;&lt;br /&gt;We are currently looking into memory demand for the clients, which increases in proportion to the #of index partitions.  I think that we will solve this by adding compressing to the RDF Values in the ID2TERM index, leading to fewering splits of that index and hence less RAM demand on the clients.&lt;br /&gt;&lt;br /&gt;While the throughput is now reasonable at 10,000 triples-per-second/host, I am hopeful that we can improve on this substantially by introducing asynchronous writes for the TERM2ID index.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-2411059422694701715?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/2411059422694701715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=2411059422694701715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/2411059422694701715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/2411059422694701715'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/05/100000-triples-per-second-to-3b-triples.html' title='100,000 triples-per-second to 3B triples'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8802240102349686129.post-3426646112084446150</id><published>2009-04-15T16:01:00.001-04:00</published><updated>2009-04-15T16:02:30.776-04:00</updated><title type='text'>stream-based API for scale-out index writes</title><content type='html'>&lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Tahoma;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;I have  finished an implementation of a stream-based approach for writing on the  scale-out indices.  This does all the right things in terms of deferring RMI  (index partition writes) until it has a good-sized chunk of data and having only  a single outstanding RMI per client per index partition.  I need to test this  and then integrate it into the RDF bulk data loader in a few places and then I  can start collecting performance data on it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Tahoma;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;I think that the TERM2ID index will  still need to use the synchronous RPC index writes since we need to have the  assigned term identifiers before we can write on the rest of the indices.   Likewise, if statement identifiers are enabled, then there will be another  synchronous RPC (which is also on the TERM2ID index) to obtain the statement  identifiers.  Once we are done with the synchronous RPC on the TERM2ID index,  the terms and statements can just be written onto an asynchronous sink for the  ID2TERM, TEXT (full text lookup), and SPO, POS, and OSP indices.  When the bulk  load finishes, it will just await the Future for those asynchronous  sinks.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;  &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="font-family:Tahoma;font-size:85%;"&gt;&lt;span style="font-size: 10pt; font-family: Tahoma;"&gt;More when I know  more.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8802240102349686129-3426646112084446150?l=www.bigdata.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/3426646112084446150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8802240102349686129&amp;postID=3426646112084446150' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3426646112084446150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8802240102349686129/posts/default/3426646112084446150'/><link rel='alternate' type='text/html' href='http://www.bigdata.com/blog/2009/04/stream-based-api-for-scale-out-index.html' title='stream-based API for scale-out index writes'/><author><name>Bryan Thompson</name><uri>http://www.blogger.com/profile/03713750976609135026</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04342170466147847364'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>