On Jun 2, 6:29 pm, Hiten <[email protected]> wrote:
> There is a way to know which table to query.
>
> Sure. Say 4 hosts with 4 tables each. Every item has an id. The last
> digit (hex) signifies the table and host.
In the Sequel model, you'd probably want to override this:
TABLES = {'0'=>[:shard_a, :table_a],
'1'=>[:shard_a, :table_b],
...
'e'=>[:shard_d, table_c],
'f'=>[:shard_d, :table_d]}
def this
shard, table = TABLES[id[-1..-1]]
super.from(table).server(shard)
end
For creating entries, something similar for _insert_dataset should
work, assuming you know the id before saving.
> Some queries are going to need go across all tables. Is that possible
> at all?
Queries on the same database could use union:
MyModel.server(:shard_a).from(:table_a).union(DB[:table_b]).union(DB[:table_c]).union(DB[:table_d])
For queries that need access multiple databases, you'd obviously have
to use separate queries. I'd probably do separate queries for each
table and server, and combine the results together:
rows = []
tables = [:table_a, :table_b, :table_c, :table_d]
shards = [:shard_a, :shard_b, :shard_c, :shard_d]
tables.each do |t|
shards.each do |s|
rows.concat DB[t].server(s).all
end
end
rows
--
You received this message because you are subscribed to the Google Groups
"sequel-talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sequel-talk?hl=en.