Skip to content

Commit

Permalink
Instrucment fetch entities
Browse files Browse the repository at this point in the history
  • Loading branch information
tarrencev committed Dec 11, 2024
1 parent 803dfd9 commit 02778a1
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
24 changes: 23 additions & 1 deletion crates/torii/grpc/src/server/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,25 +263,36 @@ impl DojoWorld {
dont_include_hashed_keys: bool,
order_by: Option<&str>,
) -> Result<Vec<proto::types::Entity>, Error> {
tracing::debug!(
"Fetching entities from table {table} with {} entity/model pairs",
entities.len()

Check warning on line 268 in crates/torii/grpc/src/server/mod.rs

View check run for this annotation

Codecov / codecov/patch

crates/torii/grpc/src/server/mod.rs#L267-L268

Added lines #L267 - L268 were not covered by tests
);
let start = std::time::Instant::now();

// Group entities by their model combinations
let mut model_groups: HashMap<String, Vec<String>> = HashMap::new();
for (entity_id, models_str) in entities {
model_groups.entry(models_str).or_default().push(entity_id);
}
tracing::debug!("Grouped into {} distinct model combinations", model_groups.len());

let mut all_entities = Vec::new();

let mut tx = self.pool.begin().await?;
tracing::debug!("Started database transaction");

// Create a temporary table to store entity IDs due to them potentially exceeding
// SQLite's parameters limit which is 999
let temp_table_start = std::time::Instant::now();
sqlx::query(
"CREATE TEMPORARY TABLE temp_entity_ids (id TEXT PRIMARY KEY, model_group TEXT)",
)
.execute(&mut *tx)
.await?;
tracing::debug!("Created temporary table in {:?}", temp_table_start.elapsed());

// Insert all entity IDs into the temporary table
let insert_start = std::time::Instant::now();
for (model_ids, entity_ids) in &model_groups {
for chunk in entity_ids.chunks(999) {
let placeholders = chunk.iter().map(|_| "(?, ?)").collect::<Vec<_>>().join(",");
Expand All @@ -296,8 +307,14 @@ impl DojoWorld {
query.execute(&mut *tx).await?;
}
}
tracing::debug!(
"Inserted all entity IDs into temporary table in {:?}",
insert_start.elapsed()

Check warning on line 312 in crates/torii/grpc/src/server/mod.rs

View check run for this annotation

Codecov / codecov/patch

crates/torii/grpc/src/server/mod.rs#L311-L312

Added lines #L311 - L312 were not covered by tests
);

for (models_str, _) in model_groups {
let query_start = std::time::Instant::now();
for (models_str, entity_ids) in &model_groups {
tracing::debug!("Processing model group with {} entities", entity_ids.len());
let model_ids =
models_str.split(',').map(|id| Felt::from_str(id).unwrap()).collect::<Vec<_>>();
let schemas =
Expand Down Expand Up @@ -325,10 +342,15 @@ impl DojoWorld {

all_entities.extend(group_entities?);
}
tracing::debug!("Processed all model groups in {:?}", query_start.elapsed());

sqlx::query("DROP TABLE temp_entity_ids").execute(&mut *tx).await?;
tracing::debug!("Dropped temporary table");

tx.commit().await?;
tracing::debug!("Committed transaction");

tracing::debug!("Total fetch_entities operation took {:?}", start.elapsed());

Ok(all_entities)
}
Expand Down
13 changes: 13 additions & 0 deletions eternum.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
world_address = "0x6a9e4c6f0799160ea8ddc43ff982a5f83d7f633e9732ce42701de1288ff705f"
rpc = "https://api.cartridge.gg/x/starknet/mainnet"
explorer = false

[indexing]
events_chunk_size = 1024
blocks_chunk_size = 1024000
pending = true
polling_interval = 500
max_concurrent_tasks = 100
transactions = false
contracts = ["ERC721:0x57675b9c0bd62b096a2e15502a37b290fa766ead21c33eda42993e48a714b80", "ERC721:0x7ae27a31bb6526e3de9cf02f081f6ce0615ac12a6d7b85ee58b8ad7947a2809", "ERC20:0x124aeb495b947201f5fac96fd1138e326ad86195b98df6dec9009158a533b49"]
namespaces = []

0 comments on commit 02778a1

Please sign in to comment.