3 Mayıs 2023 Çarşamba

Hazelcast Jet PlanExecutor Sınıfı - Execution Engine

Giriş
Şu satırı dahil ederiz
import com.hazelcast.jet.sql.impl.PlanExecutor;
catalog Alanı
Kod şöyleJDBC İçin CREATE MAPPING SQL cümlesi ile yaratılan nesneleri saklar
private final TableResolverImpl catalog;
Bu alanı değiştiren kod şöyle
SqlResult execute(CreateMappingPlan plan)
SqlResult execute(DropMappingPlan plan)
SqlResult execute(DropViewPlan plan)
SqlResult execute(DropTypePlan plan)
SqlResult execute(ShowStatementPlan plan)
dataConnectionCatalog Alanı
Kod şöyle. CREATE DATA CONNECTION SQL cümlesi ile yaratılan nesneleri saklar
private final DataConnectionResolver dataConnectionCatalog;
Bu alana ekleyen kod şöyle
SqlResult execute(CreateDataConnectionPlan plan)
SqlResult execute(DropDataConnectionPlan plan)
Catalog nesnelerine şöyle de erişebiliriz
HazelcastInstance hazelcastInstance = ...;
IMap<Object, Object> sqlCatalog = hazelcastInstance
  .getMap(JetServiceBackend.SQL_CATALOG_MAP_NAME);

for (Object catalogItem : sqlCatalog.values()) {
  if (catalogItem instanceof DataConnectionCatalogEntry) {
    ...
  }
}
execute metodları
Aslında bu sınıf bir Execution Engine. Ortalama bir veri tabanı tasarımı şöyle. Yani belirtilen Query Plan'ı çalıştırıyor.
Query Engine internally calls Parser to parse the SQL statements and convert it to Domain objects. 
The Domain Objects are then used by the Query Planner to create a query execution plan based on some rules or heuristics. 
The Query Plan is executed by the Execution Engine. 
The Execution engine talks to Storge Engine by scanning disk files and reading the table records. 
These records are then send back to Query Engine via Iterator Pattern. 
The Query Engine applies filters based on Selection and Projection Operators defined in the Query Plan and finally sends it back to the CLI for printing the table output.
Bazı imzalar şöyle
SqlResult execute(CreateMappingPlan plan)
SqlResult execute(DropMappingPlan plan)
SqlResult execute(CreateDataConnectionPlan plan)
SqlResult execute(DropDataConnectionPlan plan)
SqlResult execute(CreateIndexPlan plan)
SqlResult execute(CreateJobPlan plan, List<Object> arguments)
SqlResult execute(AlterJobPlan plan)
SqlResult execute(DropJobPlan plan)
SqlResult execute(CreateSnapshotPlan plan)
SqlResult execute(DropSnapshotPlan plan)
SqlResult execute(CreateViewPlan plan)
SqlResult execute(DropViewPlan plan)
SqlResult execute(DropTypePlan plan)
SqlResult execute(ShowStatementPlan plan)
SqlResult execute(ExplainStatementPlan plan)
execute metodu - ShowStatementPlan
İmzası şöyle. SHOW X şeklindeki SQL cümlesini çalıştırır. Örneğin SHOW RESOURCES gibi.
SqlResult execute(ShowStatementPlan plan)
Stack çıkıtısı şöyle. JdbcDataConnection#listResources metodunu çağrılıyor
listResources:124, JdbcDataConnection (com.hazelcast.dataconnection.impl)
listResources:58, JdbcDataConnection (com.hazelcast.dataconnection.impl)
executeShowResources:466, PlanExecutor (com.hazelcast.jet.sql.impl)
execute:425, PlanExecutor (com.hazelcast.jet.sql.impl)
execute:1011, SqlPlanImpl$ShowStatementPlan (com.hazelcast.jet.sql.impl) -> Visitor pattern
query0:266, SqlServiceImpl (com.hazelcast.sql.impl) -> Burada ShowStatementPlan yaratılır
execute:204, SqlServiceImpl (com.hazelcast.sql.impl)
execute:172, SqlServiceImpl (com.hazelcast.sql.impl)
execute:168, SqlServiceImpl (com.hazelcast.sql.impl)
execute:164, SqlServiceImpl (com.hazelcast.sql.impl)
execute:89, SqlService (com.hazelcast.sql)
execute metodu - CreateDataConnectionPlan
İmzası şöyle. SHOW X şeklindeki SQL cümlesini çalıştırır. Örneğin SHOW RESOURCES gibi.
SqlResult execute(CreateDataConnectionPlan plan)
DataConnectionResolver tipinden olan dataConnectionCatalog alanına bir data connection ekler. DataConnectionResolver  kendi içindeki DataConnectionStorage nesnesine yeni DataConnectionCatalogEntry nesnesini eklemeye çalışır. DataConnectionCatalogEntry nesnesi saklama alanı olarak aslında bir IMap kullanır. Kod şöyle. Yani __sql.catalog isimlie IMap kullanılıyor
IMap<String, Object> storage() {
  return nodeEngine.getHazelcastInstance().getMap(SQL_CATALOG_MAP_NAME);
}
Eğer ekleme işlemi başarılıysa bu cluster'daki tüm üyelere bildirilir. Kod şöyle
SqlResult execute(CreateDataConnectionPlan plan) {
  ...
  boolean added = dataConnectionCatalog.createDataConnection(...);
  if (added) {
    broadcastUpdateDataConnectionOperations(plan.name());
    // TODO invoke the listeners so plans can be invalidated after the
    //  change was propagated to InternalDataConnectionService
    dataConnectionCatalog.invokeChangeListeners();
  }
  return UpdateSqlResultImpl.createUpdateCountResult(0);
}
broadcastUpdateDataConnectionOperations() metodu kendi içinde UpdateDataConnectionOperation nesnesini tüm member'lara gönderir




Hiç yorum yok:

Yorum Gönder

THIRD-PARTY.txt Dosyası

Kullanılan harici kütüphanelerin sürümleri bu dosyada Dosyanın yolu şöyle hazelcast/licenses/THIRD-PARTY.txt