IP Library Granted Patent US 8,005,804
Granted Patent B2
US 8,005,804 · App. 12/696,414 · Granted Aug 23, 2011

Method and apparatus for adding a database partition

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,005,804
App. No.
12/696,414
Granted
Aug 23, 2011
Kind
B2
Abstract

A data repository system and method are provided. A method in accordance with an embodiment includes an operation that can be used to port data from one or more existing database partitions to new database partitions according to a minimally progressive hash. The method can be used to increase the overall size of databases while a system runs hot, with little or no downtime.

Claims (135)

1. A method for allocating data among a plurality of database partitions, the method comprising:

determining an existing number of partitions;

examining each existing partition to identify at least one portion of each existing partition that would be transferred to another of said existing partitions as a result of adding a new partition according to a minimally progressive hash operation; said minimally progressive hash operation configured to identify at least one portion to be transferred based on: a hash of an identifier of said at least one portion, said existing number of partitions and a second number of partitions resulting from adding a new partition to the existing number of partitions;

transitioning said at least one portion to said another of said existing partitions according to the identification made during said examining step.

2. The method of claim 1 wherein said hashing operation is selected from a class of partitioning algorithms that substantially maintain a maximum, or substantially maximum, consistency between consecutive partition sizes.

3. The method of claim 1 wherein said hashing operation is implemented according to the following pseudo-code:

define function part(hash, 1) −> (1, hash)

define function part(hash, size) −> (partition, remainder) as

let (partition, remainder) = part(hash, size−1)

if remainder mod size = 0 then

 return (size, remainder / size)

else

return (partition, remainder * (size−1) / size)

end

end function

define function part(key) −> partition

return part(hashValueOf(key), current_partition_size) end function.

4. The method of claim 1 wherein said hashing operation is implemented according to the following pseudo-code:

define function part(hash, size) −> (partition, remainder) as

let (partition, remainder) = part(hash, size−1)

let new_LCM =

 lcm(1..size)

let old_LCM =

 lcm(1..size−1)

let number_per_old =

 new_LCM / size

let steals_per_old =

 number_per_old / (size−1)

let cycle =

remainder / (new_LCM / (size−1))

let cycle_remainder =

remainder mod (new_LCM / (size−1))

let cycle_steal =

 max(0, 1 + cycle_remainder -

 number_per_old)

if cycle_steal > 0 then

return (size, (partition − 1) * steals_per_old +

cycle_steal − 1 + cycle * number_per_old)

else

return (partition, cycle * number_per_old + cycle_remainder)

end

end function.

5. The method of claim 1 , further comprising:

adding at least one new partition to said existing number of partitions;

examining each existing partition to identify which portion of each existing partition is to be transferred according to said minimally progressive hash operation; and

transitioning said identified portions to said new partition according to the identification made during said examining step.

6. The method of claim 5 wherein said adding, examining and transitioning steps are repeated until a desired number of partitions have been added.

7. A computer-based apparatus for allocating data among a plurality of database partitions, the apparatus comprising:

an interface for connection to an existing database;

a processor configured to determine an existing number of partitions in said database and to examine each existing partition in said database to identify at least one portion of each existing partition that would be transferred to another of said existing partitions as a result of adding a new partition according to a minimally progressive hash operation; said minimally progressive hash operation configured to identify at least one portion to be transferred based on: a hash of an identifier of said at least one portion, said existing number of partitions and a second number of partitions resulting from adding a new partition to the existing number of partitions;

said processor further configured to transition said at least one portion to said another of said existing partitions according to the identification made during said examining step.

8. The apparatus of claim 7 wherein said hashing operation is selected from a class of partitioning algorithms that substantially maintain a maximum, or substantially maximum, consistency between consecutive partition sizes.

9. The apparatus of claim 7 wherein said hashing operation is implemented according to the following pseudo-code:

define function part(hash, 1) −> (1, hash)

define function part(hash, size) −> (partition, remainder) as

let (partition, remainder) = part(hash, size−1)

if remainder mod size = 0 then

 return (size, remainder / size)

else

return (partition, remainder * (size−1) / size)

end

end function

define function part(key) −> partition

return part(hashValueOf(key), current_partition_size) end function.

10. The apparatus of claim 7 wherein said hashing operation is implemented according to the following pseudo-code:

define function part(hash, size) −> (partition, remainder) as

let (partition, remainder) = part(hash, size−1)

let new_LCM =

 lcm(1..size)

let old_LCM =

 lcm(1..size−1)

let number_per_old =

 new_LCM / size

let steals_per_old =

 number_per_old / (size−1)

let cycle =

remainder / (new_LCM / (size−1))

let cycle_remainder =

 remainder mod (new_LCM / (size−1))

let cycle_steal =

max(0, 1 + cycle_remainder −

number_per_old)

if cycle_steal > 0 then

return (size, (partition − 1) * steals_per_old +

cycle_steal − 1 + cycle * number_per_old)

else

return (partition, cycle * number_per_old + cycle_remainder)

end

end function.

11. The apparatus of claim 7 , said processor further configured to add at least one new partition to said existing database, to examine each existing partition to identify which portion of each existing partition is to be transferred according to said minimally progressive hash operation, and to transition said identified portions to said new partition according to the identification made during said examining step.

12. A computer readable media storing a plurality of programming instructions; said programming instructions executable by a computing apparatus; said programming instructions configured to implement a method for adding a database partition comprising:

determining an existing number of partitions;

adding at least one new partition to said existing number of partitions;

examining each existing partition to determine which portion of each existing partition is to be transferred according to a minimally progressive hash operation;

said minimally progressive hash operation configured to identify at least one portion to be transferred based on: a hash of an identifier of said at least one portion, said existing number of partitions and a second number of partitions resulting from adding said at least one new partition; and,

transitioning portions of existing partitions to said new partition according to the determinations made during said examining step.

13. The computer readable media of claim 12 wherein said hashing operation is selected from a class of partitioning algorithms that substantially maintain a maximum, or substantially maximum, consistency between consecutive partition sizes.

14. The computer readable media of claim 12 wherein said method is repeated until a desired number of partitions have been added.

15. The computer readable media of claim 12 wherein said hashing operation is implemented according to the following pseudo-code:

define function part(hash, 1) −> (1, hash)

define function part(hash, size) −> (partition, remainder) as

let (partition, remainder) = part(hash, size−1)

if remainder mod size = 0 then

return (size, remainder / size)

else

return (partition, remainder * (size−1) / size)

end

end function

define function part(key) −> partition

return part(hashValueOf(key), current_partition_size) end function.

16. The computer readable media of claim 12 wherein said hashing operation is implemented according to the following pseudo-code:

define function part(hash, size) −> (partition, remainder) as

let (partition, remainder) = part(hash, size−1)

let new_LCM =

 lcm(1..size)

let old_LCM =

 lcm(1..size−1)

let number_per_old =

 new_LCM / size

let steals_per_old =

 number_per_old / (size−1)

let cycle =

remainder / (new_LCM / (size−1))

let cycle_remainder =

 remainder mod (new_LCM / (size−1))

let cycle_steal =

max(0, 1 + cycle_remainder −

number_per_old)

if cycle_steal > 0 then

return (size, (partition − 1) * steals_per_old +

cycle_steal − 1 + cycle * number_per_old)

else

return (partition, cycle * number_per_old + cycle_remainder)

end

end function.

Assignments (2)
SECURITY AGREEMENT Recorded Oct 29, 2012
From: REDKNEE INC.
To: WELLS FARGO CAPITAL FINANCE CORPORATION CANADA
Reel/Frame 029207/0433 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 21, 2010
From: GREER, KEVIN GLEN ROY
To: REDKNEE INC.
Reel/Frame 024264/0285 →