I cannot facet on one huge index; it runs out of ram when it attempts to
allocate a giant array. If I store several shards in one JVM, there is
no problem.

Are there any performance benefits to a large index v.s. several small
indexes?

Lance 

-----Original Message-----
From: Marcus Herou [mailto:[EMAIL PROTECTED] 
Sent: Sunday, June 15, 2008 10:24 PM
To: solr-user@lucene.apache.org
Subject: Re: scaling / sharding questions

Yep got that.

Thanks.

/M

On Sun, Jun 15, 2008 at 8:42 PM, Otis Gospodnetic <
[EMAIL PROTECTED]> wrote:

> With Lance's MD5 schema you'd do this:
>
> 1 shard: 0-f*
> 2 shards: 0-8*, 9-f*
> 3 shards: 0-5*, 6-a*, b-f*
> 4 shards: 0-3*, 4-7*, 8-b*, c-f*
> ...
> 16 shards: 0*, 1*, 2*....... d*, e*, f*
>
> Otis
> --
> Sematext -- http://sematext.com/ -- Lucene - Solr - Nutch
>
>
> ----- Original Message ----
> > From: Marcus Herou <[EMAIL PROTECTED]>
> > To: solr-user@lucene.apache.org
> > Cc: [EMAIL PROTECTED]
> > Sent: Saturday, June 14, 2008 5:53:35 AM
> > Subject: Re: scaling / sharding questions
> >
> > Hi.
> >
> > We as well use md5 as the uid.
> >
> > I guess by saying each 1/16th is because the md5 is hex, right?
(0-f).
> > Thinking about md5 sharding.
> > 1 shard: 0-f
> > 2 shards: 0-7:8-f
> > 3 shards: problem!
> > 4 shards: 0-3....
> >
> > This technique would require that you double the amount of shards 
> > each
> time
> > you split right ?
> >
> > Split by delete sounds really smart, damn that I did'nt think of 
> > that :)
> >
> > Anyway over time the technique of moving the whole index to a new 
> > shard
> and
> > then delete would probably be more than challenging.
> >
> >
> >
> >
> > I will never ever store the data in Lucene mainly because of bad exp

> > and since I want to create modules which are fast,  scalable and 
> > flexible and storing the data alongside with the index do not match 
> > that for me at
> least.
> >
> > So yes I will have the need to do a "foreach id in ids get document"
> > approach in the searcher code, but at least I can optimize the 
> > retrieval
> of
> > docs myself and let Lucene do what it's good at: indexing and 
> > searching
> not
> > storage.
> >
> > I am more and more thinking in terms of having different levels of
> searching
> > instead of searcing in all shards at the same time.
> >
> > Let's say you start with 4 shards where you each document is 
> > replicated 4 times based on publishdate. Since all shards have the 
> > same data you can
> lb
> > the query to any of the 4 shards.
> >
> > One day you find that 4 shards is not enough because of search
> performance
> > so you add 4 new shards. Now you only index these 4 new shards with 
> > the
> new
> > documents making the old ones readonly.
> >
> > The searcher would then prioritize the new shards and only if the 
> > query returns less than X results you start querying the old shards.
> >
> > This have a nice side effect of having the most relevant/recent 
> > entries
> in
> > the index which is searched the most. Since the old shards will be 
> > mostly idle you can as well convert 2 of the old shards to "new" 
> > shards reducing the need for buying new servers.
> >
> > What I'm trying to say is that you will end up with an architecture 
> > which have many nodes on top which each have few documents and fewer

> > and fewer nodes as you go down the architecture but where each node 
> > store more documents since the search speed get's less and less
relevant.
> >
> > Something like this:
> >
> > xxxxxxxx - Primary: 10M docs per shard, make sure 95% of the results
> comes
> > from here.
> >    yyyy - Standby: 100M docs per shard - merges of 10 primary
indices.
> >      zz - Archive: 1000M docs per shard - merges of 10 standby
indices.
> >
> > Search top-down.
> > The numbers are just speculative. The drawback with this 
> > architecture is that you get no indexing benefit at all if the 
> > architecture drawn above
> is
> > the same as which you use for indexing. I think personally you 
> > should use
> X
> > indexers which then merge indices (MapReduce) for max performance 
> > and lay them out as described above.
> >
> > I think Google do something like this.
> >
> >
> > Kindly
> >
> > //Marcus
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On Sat, Jun 14, 2008 at 2:27 AM, Lance Norskog wrote:
> >
> > > Yes, I've done this split-by-delete several times. The halved 
> > > index
> still
> > > uses as much disk space until you optimize it.
> > >
> > > As to splitting policy: we use an MD5 signature as our unique ID. 
> > > This
> has
> > > the lovely property that we can wildcard.  'contentid:f*' denotes 
> > > 1/16
> of
> > > the whole index. This 1/16 is a very random sample of the whole
index.
> We
> > > use this for several things. If we use this for shards, we have a 
> > > query that matches a shard's contents.
> > >
> > > The Solr/Lucene syntax does not support modular arithmetic,and so 
> > > it
> will
> > > not let you query a subset that matches one of your shards.
> > >
> > > We also found that searching a few smaller indexes via the Solr 
> > > 1.3 Distributed Search feature is actually faster than searching 
> > > one large index, YMMV. So for us, a large pile of shards will be 
> > > optimal anyway,
> so
> > > we
> > > have to need "rebalance".
> > >
> > > It sounds like you're not storing the data in a backing store, but

> > > are storing all data in the index itself. We have found this
"challenging".
> > >
> > > Cheers,
> > >
> > > Lance Norskog
> > >
> > > -----Original Message-----
> > > From: Jeremy Hinegardner [mailto:[EMAIL PROTECTED]
> > > Sent: Friday, June 13, 2008 3:36 PM
> > > To: solr-user@lucene.apache.org
> > > Subject: Re: scaling / sharding questions
> > >
> > > Sorry for not keeping this thread alive, lets see what we can
do...
> > >
> > > One option I've thought of for 'resharding' would splitting an 
> > > index
> into
> > > two by just copying it, the deleting 1/2 the documents from one, 
> > > doing
> a
> > > commit, and delete the other 1/2 from the other index and commit.

> > > That
> is:
> > >
> > >  1) Take original index
> > >  2) copy to b1 and b2
> > >  3) delete docs from b1 that match a particular query A
> > >  4) delete docs from b2 that do not match a particular query A
> > >  5) commit b1 and b2
> > >
> > > Has anyone tried something like that?
> > >
> > > As for how to know where each document is stored, generally we're 
> > > considering unique_document_id % N.  If we rebalance we change N 
> > > and redistribute, but that
> > > probably will take too much time.    That makes us move more
towards a
> > > staggered
> > > age based approach where the most recent docs filter down to
> "permanent"
> > > indexes based upon time.
> > >
> > > Another thought we've had recently is to have many many many 
> > > physical shards, on the indexing writer side, but then merge 
> > > groups of them into logical shards which are snapshotted to reader

> > > solrs' on a frequent
> basis.
> > > I haven't done any testing along these lines, but logically it 
> > > seems
> like
> > > an
> > > idea worth pursuing.
> > >
> > > enjoy,
> > >
> > > -jeremy
> > >
> > > On Fri, Jun 06, 2008 at 03:14:10PM +0200, Marcus Herou wrote:
> > > > Cool sharding technique.
> > > >
> > > > We as well are thinking of howto "move" docs from one index to
> another
> > > > because we need to re-balance the docs when we add new nodes to 
> > > > the
> > > cluster.
> > > > We do only store id's in the index otherwise we could have moved
> stuff
> > > > around with IndexReader.document(x) or so. Luke
> > > > (http://www.getopt.org/luke/) is able to reconstruct the indexed
> > > Document
> > > data so it should be doable.
> > > > However I'm thinking of actually just delete the docs from the 
> > > > old index and add new Documents to the new node. It would be 
> > > > cool to not waste cpu cycles by reindexing already indexed stuff
but...
> > > >
> > > > And we as well will have data amounts in the range you are 
> > > > talking about. We perhaps could share ideas ?
> > > >
> > > > How do you plan to store where each document is located ? I mean

> > > > you probably need to store info about the Document and it's 
> > > > location somewhere perhaps in a clustered DB ? We will probably 
> > > > go for HBase
> for
> > > this.
> > > >
> > > > I think the number of documents is less important than the 
> > > > actual
> data
> > > > size (just speculating). We currently search 10M (will get much 
> > > > much
> > > > larger) indexed blog entries on one machine where the JVM has 1G
> heap,
> > > > the index size is 3G and response times are still quite fast. 
> > > > This is a readonly node though and is updated every morning with

> > > > a freshly optimized index. Someone told me that you probably 
> > > > need twice the RAM if you plan to both index and search at the 
> > > > same time. If I were you
> I
> > > > would just test to index X entries of your data and then start 
> > > > to search in the index with lower JVM settings each round and 
> > > > when response times get too slow or you hit OOE then you get a 
> > > > rough
> estimate
> > > of the bare minimum X RAM needed for Y entries.
> > > >
> > > > I think we will do with something like 2G per 50M docs but I 
> > > > will
> need
> > > > to test it out.
> > > >
> > > > If you get an answer in this matter please let me know.
> > > >
> > > > Kindly
> > > >
> > > > //Marcus
> > > >
> > > >
> > > > On Fri, Jun 6, 2008 at 7:21 AM, Jeremy Hinegardner
> > > >
> > > > wrote:
> > > >
> > > > > Hi all,
> > > > >
> > > > > This may be a bit rambling, but let see how it goes.  I'm not 
> > > > > a Lucene or Solr guru by any means, I have been prototyping 
> > > > > with solr and understanding how all the pieces and parts fit
together.
> > > > >
> > > > > We are migrating our current document storage infrastructure 
> > > > > to a decent sized solr cluster, using 1.3-snapshots right now.
> > > > > Eventually this will be in the
> > > > > billion+ documents, with about 1M new documents added per day.
> > > > >
> > > > > Our main sticking point right now is that a significant number

> > > > > of our documents will be updated, at least once, but possibly 
> > > > > more
> than
> > > > > once.  The volatility of a document decreases over time.
> > > > >
> > > > > With this in mind, we've been considering using a cascading 
> > > > > series of shard clusters.  That is :
> > > > >
> > > > >  1) a cluster of shards holding recent data ( most recent week

> > > > > or two ) smaller
> > > > >    indexes that take a small amount of time to commit updates 
> > > > > and
> > > optimise,
> > > > >    since this will hold the most volatile documents.
> > > > >
> > > > >  2) Following that another cluster of shards that holds some 
> > > > > relatively recent
> > > > >    ( 3-6 months ? ), but not super volatile, documents, these 
> > > > > are items that
> > > > >    could potentially receive updates, but generally not.
> > > > >
> > > > >  3) A final set of 'archive' shards holding the final resting 
> > > > > place
> for
> > > > >    documents.  These would not receive updates.  These would 
> > > > > be
> online
> > > for
> > > > >    searching and analysis "forever".
> > > > >
> > > > > We are not sure if this is the best way to go, but it is the 
> > > > > approach we are leaning toward right now.  I would like some 
> > > > > feedback from the folks here if you think that is a reasonable

> > > > > approach.
> > > > >
> > > > > One of the other things I'm wondering about is how to 
> > > > > manipulate indexes We'll need to roll documents around between

> > > > > indexes over time, or at least migrate indexes from one set of

> > > > > shards to another
> as
> > > the documents 'age'
> > > > > and
> > > > > merge/aggregate them with more 'stable' indexes.   I know
about
> merging
> > > > > complete
> > > > > indexes together, but what about migrating a subset of 
> > > > > documents from one index into another index?
> > > > >
> > > > > In addition, what is generally considered a 'manageable' index

> > > > > of large size?  I was attempting to find some information on 
> > > > > the relationship between search response times, the amount of 
> > > > > memory
> for
> > > > > used for a search, and the number of documents in an index, 
> > > > > but I wasn't having much luck.
> > > > >
> > > > > I'm not sure if I'm making sense here, but just thought I 
> > > > > would throw this out there and see what people think.  Ther 
> > > > > eis the distinct possibility that I am not asking the right 
> > > > > questions or considering the right parameters, so feel free to

> > > > > correct me, or
> ask
> > > > > questions as you see fit.
> > > > >
> > > > > And yes, I will report how we are doing things when we get 
> > > > > this all figured out, and if there are items that we can 
> > > > > contribute back to Solr we will.  If nothing else there will 
> > > > > be a nice article of how we manage TB of data with Solr.
> > > > >
> > > > > enjoy,
> > > > >
> > > > > -jeremy
> > > > >
> > > > > --
> > > > >
> > >
> ======================================================================
> ==
> > > > >  Jeremy Hinegardner
> > > [EMAIL PROTECTED]
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Marcus Herou CTO and co-founder Tailsweep AB
> > > > +46702561312
> > > > [EMAIL PROTECTED]
> > > > http://www.tailsweep.com/
> > > > http://blogg.tailsweep.com/
> > >
> > > --
> > >
> ======================================================================
> ==
> > >  Jeremy Hinegardner
> [EMAIL PROTECTED]
> > >
> > >
> > >
> >
> >
> > --
> > Marcus Herou CTO and co-founder Tailsweep AB
> > +46702561312
> > [EMAIL PROTECTED]
> > http://www.tailsweep.com/
> > http://blogg.tailsweep.com/
>
>


--
Marcus Herou CTO and co-founder Tailsweep AB
+46702561312
[EMAIL PROTECTED]
http://www.tailsweep.com/
http://blogg.tailsweep.com/

Reply via email to