Method: Webhookdb::Replicator::Base.chunked_row_update_bounds
- Defined in:
- lib/webhookdb/replicator/base.rb
.chunked_row_update_bounds(max_pk, chunk_size: 1_000_000) ⇒ Object
Return an array of tuples used for splitting UPDATE queries so locks are not held on the entire table when backfilling values when adding new columns. See ensure_all_columns_modification.
The returned chunks are like: [[0, 100], [100, 200], [200]], and meant to be used like ‘0 < pk <= 100`, `100 < pk <= 200`, `p, > 200`.
Note that final value in the array is a single item, used like ‘pk > chunks[0]`.
593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 |
# File 'lib/webhookdb/replicator/base.rb', line 593 def self.chunked_row_update_bounds(max_pk, chunk_size: 1_000_000) result = [] chunk_lower_pk = 0 chunk_upper_pk = chunk_size while chunk_upper_pk <= max_pk # Get chunks like 0 < pk <= 100, 100 < pk <= 200, etc # Each loop we increment one row chunk size, until we find the chunk containing our max PK. # Ie if row chunk size is 100, and max_pk is 450, the final chunk here is 400-500. result << [chunk_lower_pk, chunk_upper_pk] chunk_lower_pk += chunk_size chunk_upper_pk += chunk_size end # Finally, one final chunk for all rows greater than our biggest chunk. # For example, with a row chunk size of 100, and max_pk of 450, we got a final chunk of 400-500. # But we could have gotten 100 writes (with a new max pk of 550), so this 'pk > 500' catches those. result << [chunk_lower_pk] end |