示例#1
0
void UpdateIndexUtility(storage::DataTable* table,
                        const std::vector<sample_frequency_map_entry>& list) {

  oid_t index_count = table->GetIndexCount();

  for (oid_t index_itr = 0; index_itr < index_count; index_itr++) {

    // Get index
    auto index = table->GetIndex(index_itr);
    auto index_metadata = index->GetMetadata();
    auto index_key_attrs = index_metadata->GetKeyAttrs();

    std::set<oid_t> index_set(index_key_attrs.begin(), index_key_attrs.end());

    // Get current index utility
    auto current_index_utility = GetCurrentIndexUtility(index_set, list);

    auto average_index_utility = index_metadata->GetUtility();

    LOG_TRACE("Average index utility %5.2lf", average_index_utility);
    LOG_TRACE("Current index utility %5.2lf", current_index_utility);

    // alpha (weight for old samples)
    double alpha = 0.2;

    // Update index utility
    auto updated_average_index_utility =
        alpha * current_index_utility + (1 - alpha) * average_index_utility;

    index_metadata->SetUtility(updated_average_index_utility);

    LOG_TRACE("Updated index utility %5.2lf :: %s",
              updated_average_index_utility, index_metadata->GetInfo().c_str());
  }
}
示例#2
0
TEST_F(CatalogTests, CreatingDatabase) {
  auto &txn_manager = concurrency::TransactionManagerFactory::GetInstance();
  auto txn = txn_manager.BeginTransaction();
  catalog::Catalog::GetInstance()->CreateDatabase("EMP_DB", txn);
  auto table_object = catalog::Catalog::GetInstance()->GetTableObject(
      CATALOG_DATABASE_NAME, INDEX_CATALOG_NAME, txn);
  auto index_object = table_object->GetIndexObject(INDEX_CATALOG_PKEY_OID);
  std::vector<oid_t> key_attrs = index_object->GetKeyAttrs();

  EXPECT_EQ("EMP_DB", catalog::Catalog::GetInstance()
                          ->GetDatabaseWithName("EMP_DB", txn)
                          ->GetDBName());
  txn_manager.CommitTransaction(txn);
  EXPECT_EQ(1, key_attrs.size());
  EXPECT_EQ(0, key_attrs[0]);
}