SqlAggregator类
SqlAggregator 是一个类,其作用类似于分布式连接,但仅在一个进程中运行。
要使用 SqlAggregator,C++ 应用程序会创建一个 SqlEngine 对象数组作为分片运行。然后启动所有 SqlEngine 对象,并将数组传递给 SqlAggregator 构造函数。
例如:
const int n_engines = 3;
McoSql::SqlEngine *engines[n_engines];
...
for (i=0; I < n_engines; i++ )
{
engine.open( db_name, persondb_get_dictionary(), DATABASE_SIZE, MEMORY_PAGE_SIZE);
}
...
McoSql::SqlAggregator aggregator(engines, n_engines);
一旦 aggregator
创建并初始化完成,就可以像使用 SqlEngine 一样使用。例如:
McoSql::QueryResult result(
aggregator.executeQuery( "select pk,value from MyTable" )
);
当不再需要时,必须通过 SqlAggregator 的 close()
方法关闭 aggregator
。传入 aggregator
的所有引擎也必须显式关闭。例如:
printf ("Closing aggregator.\n");
aggregator.close();
printf ("Closing engines.\n");
for (i = 0; i < n_engines; i++)
{
engines[i]->close();
}
请注意,SqlAggregator 类直接使用传递给构造函数的 SqlEngine 对象。因此,**在 SqlAggregator 对象的生命周期内,这些 SqlEngine 对象不应在其他应用程序代码中使用。**这会导致这些对象在不同的程序线程中同时被使用:应用程序的线程和由 SqlAggregator 内部创建的用于服务 SqlEngines 的线程。
SQL 字符串长度
对于 SqlEngine 类的 executeStatement()
和 executeQuery()
方法,语句字符串参数的长度没有限制,但对于 SqlAggregator 类,语句字符串的长度受构造函数中传递的 bufferSize
参数限制。默认值为 64 Kb。
有关更多详细信息,请参阅 SQL 语句字符串页面。