Visar,

HiLo is not magic. The assertion "Whenever the counter reaches max_lo, it
fetches a new Hi value from the DB." applies to a LIVE APPLICATION INSTANCE
/ SessionFactory. The first time an id needs to be generated in a session
factory, a new Hi value is fetched.
Also, read Tuna's post. If you want to "preserve" all your key space (I
can't think why. Are 64-bit integers expensive in your country?), use
identity.

   Diego


On Sat, Apr 3, 2010 at 08:51, Visar Uruqi <visar.ur...@gmail.com> wrote:

> Hello Diego
>
> Thank you very much for your detailed explanation
> I did some tests and found out many things about the hilo
> implementation in nhibernate,
>
> I have a question regarding the lo value the so called "counter"
> You said "Whenever the counter reaches max_lo, it fetches a new Hi
> value from the DB."
>
> Well After I restart my application the counter doesn't continue where
> it left, instead
> it inserts a new "next_hi" value specifically it increment's the
> "next_hi" value in DB,
> whereby it wastes many id's, what I'm trying to say, the counter
> doesn't reach
> necessarily the max_lo, after application restart it fetches a new Hi.
>
> Is there a way to preserve the counter, so if it doesn't reach the
> max_lo, it should
> continue where it left on the next start of application and not insert
> a new nex_hi value
> and whereby waste a whole range of keys? Is there a possibility to
> continue where it left?
>
> Visar
>
>
> On Mar 31, 11:25 pm, Diego Mijelshon <di...@mijelshon.com.ar> wrote:
> > Read the post carefully. The second formula is how to determine the value
> to
> > insert as the initial "next_hi" when migrating from identity.
> >
> > You can see exactly how the IDs are generated here:
> https://nhibernate.svn.sourceforge.net/svnroot/nhibernate/trunk/nhibe...
> > .
> > They are not random, they are sequential.
> >
> > And yes, you can potentially run out ofhi numbers. To avoid it, you need
> > to:
> > - Use long enough Id columns (32 or 64 bits depending on the usage)
> > - Adjust the max_lo value to reduce the "wasted" key space when
> application
> > instances generate much less values than the default (this applies mostly
> to
> > desktop applications)
> >
> >    Diego
> >
> >
> >
> > On Wed, Mar 31, 2010 at 17:36, Visar Uruqi <visar.ur...@gmail.com>
> wrote:
> > > Thank you very much Diego for your reply.
> >
> > > I found the following formulas in this link
> >
> > >http://stackoverflow.com/questions/1390078/is-there-a-practical-way-o.
> ..
> >
> > > hilo-id = high-value * max_lo + low-value
> >
> > > high-value = ceiling(current-identity / max-lo)
> >
> > > Can you check if they are ok? Is the hilo-id really by this
> > > formulas generated?
> >
> > > How is the lo-value generated in the clients computer? Randomly?
> >
> > > Is it true that all numbers might get exhausted?
> >
> > > Visar
> >
> > > On Mar 31, 3:58 pm, Diego Mijelshon <di...@mijelshon.com.ar> wrote:
> > > > There aren't many steps... it's pretty simple... I'll try to address
> your
> > > > questions.
> >
> > > > I did not understood this part "Don’t use this generator with a user-
> >
> > > > supplied connection".
> >
> > > > Anybody know what he meant with this?
> >
> > > > ISessionFactory.OpenSession has overloads that take an IDbConnection.
> > > > If you use them, you can't use HiLo, because it needs the
> SessionFactory
> > > to
> > > > be managing connections.
> > > > It's an implementation detail, but basically, the hi values are
> retrieved
> > > in
> > > > a separate transaction, as they are SessionFactory-wide and
> indepentent
> > > of
> > > > the Session-initiated transaction.
> >
> > > > I tried the hilo and it generates a table with the name
> >
> > > > "hibernate_unique_key" and one
> >
> > > > column "next_hi"
> >
> > > > Those are actually configurable. It might help thinking of that table
> > > with a
> > > > single column and record as a replacement for sequences in databases
> that
> > > > don't support them. When you use seqhilo, all you have is a sequence
> > > name.
> >
> > > > It also generates high values for ID's like 32772
> >
> > > > I would like to understand this in depth, what are they for?
> >
> > > > The HiLo algorithm is pretty straightforward.
> > > > Each identifier is composed by two parts, a Hi value that comes from
> the
> > > DB,
> > > > and a Lo value that is generated locally (an incrementing counter)
> > > > The Id is generating by combining those two parts, based on the
> max_lo
> > > > parameter, which specifies how many values you can generate for each
> Hi
> > > > value retrieved from the DB.
> > > > The default max_lo is 32767, which means the lower 15 bits would be
> used
> > > for
> > > > Lo values (that's why a value like 32772 is generated in the first
> > > > transaction).
> > > > Whenever the counter reaches max_lo, it fetches a new Hi value from
> the
> > > DB.
> >
> > > > For the implications of the HiLo behavior, I recommend this post by
> > > Fabio:
> > >http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-expl.
> ..
> >
> > > >    Diego
> >
> > > > On Wed, Mar 31, 2010 at 10:10, Visar Uruqi <visar.ur...@gmail.com>
> > > wrote:
> > > > > Hello
> >
> > > > > Is there a step by step using hilo article?
> >
> > > > > I found out that in order to take advantage of batch commands in
> > > > > nhibernate
> > > > > you have to use hile generator (<generator class="hilo" />)
> > > > > I looked at Nh Doc and Nh in Action, it does not say much about it,
> > > > > I've came accross this statement:
> >
> > > > > "Generates identifiers that are unique only for a particular
> database.
> > > > > A high/low algorithm
> > > > > is an efficient way to generate identifiers of any integral type,
> > > > > given a table and
> > > > > column (by default hibernate_unique_key and next_hi, respectively)
> as
> > > > > a source of hi
> > > > > values. See (Ambler 2002) for more information about the high/low
> > > > > approach to unique
> > > > > identifiers. Don’t use this generator with a user-supplied
> > > > > connection."
> >
> > > > > I did not understood this part "Don’t use this generator with a
> user-
> > > > > supplied connection".
> > > > > Anybody know what he meant with this?
> >
> > > > > I tried the hilo and it generates a table with the name
> > > > > "hibernate_unique_key" and one
> > > > > column "next_hi", It also generates high values for ID's like 32772
> > > > > I would like to understand this in depth, what are they for?
> > > > > If anybody knows a link that explains much in detail about hilo?
> > > > > I'm very curious to know about this.
> >
> > > > > Visar
> >
> > > > > --
> > > > > You received this message because you are subscribed to the Google
> > > Groups
> > > > > "nhusers" group.
> > > > > To post to this group, send email to nhus...@googlegroups.com.
> > > > > To unsubscribe from this group, send email to
> > > > > nhusers+unsubscr...@googlegroups.com<nhusers%2bunsubscr...@googlegroups.com>
> <nhusers%2bunsubscr...@googlegroups.com<nhusers%252bunsubscr...@googlegroups.com>>
> > > <nhusers%2bunsubscr...@googlegroups.com<nhusers%252bunsubscr...@googlegroups.com>
> <nhusers%252bunsubscr...@googlegroup s.com>>
> > > > > .
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/nhusers?hl=en.
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "nhusers" group.
> > > To post to this group, send email to nhus...@googlegroups.com.
> > > To unsubscribe from this group, send email to
> > > nhusers+unsubscr...@googlegroups.com<nhusers%2bunsubscr...@googlegroups.com>
> <nhusers%2bunsubscr...@googlegroups.com<nhusers%252bunsubscr...@googlegroups.com>>
> > > .
> > > For more options, visit this group at
> > >http://groups.google.com/group/nhusers?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to nhus...@googlegroups.com.
> To unsubscribe from this group, send email to
> nhusers+unsubscr...@googlegroups.com<nhusers%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to nhus...@googlegroups.com.
To unsubscribe from this group, send email to 
nhusers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to