Skip to content

Commit

Permalink
Re-apply "indexer: cp sequence number for tx indices query perf (#16617
Browse files Browse the repository at this point in the history
…)""

This reverts commit c47b362.
  • Loading branch information
gegaowp committed May 2, 2024
1 parent e179f17 commit 7915d84
Show file tree
Hide file tree
Showing 14 changed files with 85 additions and 71 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
DROP TABLE IF EXISTS tx_senders;
DROP TABLE IF EXISTS tx_recipients;
DROP TABLE IF EXISTS tx_input_objects;
DROP TABLE IF EXISTS tx_changed_objects;
DROP TABLE IF EXISTS tx_calls;
47 changes: 47 additions & 0 deletions crates/sui-indexer/migrations/2023-10-06-204335_tx_indices/up.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
CREATE TABLE tx_senders (
cp_sequence_number BIGINT NOT NULL,
tx_sequence_number BIGINT NOT NULL,
-- SuiAddress in bytes.
sender BYTEA NOT NULL,
PRIMARY KEY(sender, tx_sequence_number, cp_sequence_number)
);
CREATE INDEX tx_senders_tx_sequence_number_index ON tx_senders (tx_sequence_number ASC, cp_sequence_number ASC);

CREATE TABLE tx_recipients (
cp_sequence_number BIGINT NOT NULL,
tx_sequence_number BIGINT NOT NULL,
-- SuiAddress in bytes.
recipient BYTEA NOT NULL,
PRIMARY KEY(recipient, tx_sequence_number, cp_sequence_number)
);
CREATE INDEX tx_recipients_tx_sequence_number_index ON tx_recipients (tx_sequence_number ASC, cp_sequence_number ASC);

CREATE TABLE tx_input_objects (
cp_sequence_number BIGINT NOT NULL,
tx_sequence_number BIGINT NOT NULL,
-- Object ID in bytes.
object_id BYTEA NOT NULL,
PRIMARY KEY(object_id, tx_sequence_number, cp_sequence_number)
);

CREATE TABLE tx_changed_objects (
cp_sequence_number BIGINT NOT NULL,
tx_sequence_number BIGINT NOT NULL,
-- Object Id in bytes.
object_id BYTEA NOT NULL,
PRIMARY KEY(object_id, tx_sequence_number, cp_sequence_number)
);

CREATE TABLE tx_calls (
cp_sequence_number BIGINT NOT NULL,
tx_sequence_number BIGINT NOT NULL,
package BYTEA NOT NULL,
module TEXT NOT NULL,
func TEXT NOT NULL,
-- 1. Using Primary Key as a unique index.
-- 2. Diesel does not like tables with no primary key.
PRIMARY KEY(package, tx_sequence_number, cp_sequence_number)
);
CREATE INDEX tx_calls_module ON tx_calls (package, module, tx_sequence_number, cp_sequence_number);
CREATE INDEX tx_calls_func ON tx_calls (package, module, func, tx_sequence_number, cp_sequence_number);
CREATE INDEX tx_calls_tx_sequence_number ON tx_calls (tx_sequence_number, cp_sequence_number);

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

14 changes: 0 additions & 14 deletions crates/sui-indexer/migrations/2023-10-06-204400_tx_calls/up.sql

This file was deleted.

35 changes: 23 additions & 12 deletions crates/sui-indexer/src/models/tx_indices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,36 +20,41 @@ pub struct TxDigest {
}

#[derive(Queryable, Insertable, Debug, Clone, Default)]
#[diesel(table_name = tx_input_objects)]
pub struct StoredTxInputObject {
#[diesel(table_name = tx_senders)]
pub struct StoredTxSenders {
pub cp_sequence_number: i64,
pub tx_sequence_number: i64,
pub object_id: Vec<u8>,
pub sender: Vec<u8>,
}

#[derive(Queryable, Insertable, Debug, Clone, Default)]
#[diesel(table_name = tx_changed_objects)]
pub struct StoredTxChangedObject {
#[diesel(table_name = tx_recipients)]
pub struct StoredTxRecipients {
pub cp_sequence_number: i64,
pub tx_sequence_number: i64,
pub object_id: Vec<u8>,
pub recipient: Vec<u8>,
}

#[derive(Queryable, Insertable, Debug, Clone, Default)]
#[diesel(table_name = tx_senders)]
pub struct StoredTxSenders {
#[diesel(table_name = tx_input_objects)]
pub struct StoredTxInputObject {
pub cp_sequence_number: i64,
pub tx_sequence_number: i64,
pub sender: Vec<u8>,
pub object_id: Vec<u8>,
}

#[derive(Queryable, Insertable, Debug, Clone, Default)]
#[diesel(table_name = tx_recipients)]
pub struct StoredTxRecipients {
#[diesel(table_name = tx_changed_objects)]
pub struct StoredTxChangedObject {
pub cp_sequence_number: i64,
pub tx_sequence_number: i64,
pub recipient: Vec<u8>,
pub object_id: Vec<u8>,
}

#[derive(Queryable, Insertable, Debug, Clone, Default)]
#[diesel(table_name = tx_calls)]
pub struct StoredTxCalls {
pub cp_sequence_number: i64,
pub tx_sequence_number: i64,
pub package: Vec<u8>,
pub module: String,
Expand All @@ -68,10 +73,12 @@ impl TxIndex {
Vec<StoredTxCalls>,
) {
let tx_sequence_number = self.tx_sequence_number as i64;
let cp_sequence_number = self.checkpoint_sequence_number as i64;
let tx_senders = self
.senders
.iter()
.map(|s| StoredTxSenders {
cp_sequence_number,
tx_sequence_number,
sender: s.to_vec(),
})
Expand All @@ -80,6 +87,7 @@ impl TxIndex {
.recipients
.iter()
.map(|s| StoredTxRecipients {
cp_sequence_number,
tx_sequence_number,
recipient: s.to_vec(),
})
Expand All @@ -88,6 +96,7 @@ impl TxIndex {
.input_objects
.iter()
.map(|o| StoredTxInputObject {
cp_sequence_number,
tx_sequence_number,
object_id: bcs::to_bytes(&o).unwrap(),
})
Expand All @@ -96,6 +105,7 @@ impl TxIndex {
.changed_objects
.iter()
.map(|o| StoredTxChangedObject {
cp_sequence_number,
tx_sequence_number,
object_id: bcs::to_bytes(&o).unwrap(),
})
Expand All @@ -104,6 +114,7 @@ impl TxIndex {
.move_calls
.iter()
.map(|(p, m, f)| StoredTxCalls {
cp_sequence_number,
tx_sequence_number,
package: p.to_vec(),
module: m.to_string(),
Expand Down
15 changes: 10 additions & 5 deletions crates/sui-indexer/src/schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,8 @@ diesel::table! {
}

diesel::table! {
tx_calls (package, tx_sequence_number) {
tx_calls (package, tx_sequence_number, cp_sequence_number) {
cp_sequence_number -> Int8,
tx_sequence_number -> Int8,
package -> Bytea,
module -> Text,
Expand All @@ -199,28 +200,32 @@ diesel::table! {
}

diesel::table! {
tx_changed_objects (object_id, tx_sequence_number) {
tx_changed_objects (object_id, tx_sequence_number, cp_sequence_number) {
cp_sequence_number -> Int8,
tx_sequence_number -> Int8,
object_id -> Bytea,
}
}

diesel::table! {
tx_input_objects (object_id, tx_sequence_number) {
tx_input_objects (object_id, tx_sequence_number, cp_sequence_number) {
cp_sequence_number -> Int8,
tx_sequence_number -> Int8,
object_id -> Bytea,
}
}

diesel::table! {
tx_recipients (recipient, tx_sequence_number) {
tx_recipients (recipient, tx_sequence_number, cp_sequence_number) {
cp_sequence_number -> Int8,
tx_sequence_number -> Int8,
recipient -> Bytea,
}
}

diesel::table! {
tx_senders (sender, tx_sequence_number) {
tx_senders (sender, tx_sequence_number, cp_sequence_number) {
cp_sequence_number -> Int8,
tx_sequence_number -> Int8,
sender -> Bytea,
}
Expand Down

0 comments on commit 7915d84

Please sign in to comment.