/** * 本测试展示了如何用LtCache给LtDb提高性能 */ public function testPerformance() { /** * 配置数据库连接信息 */ $dcb = new LtDbConfigBuilder(); $dcb->addSingleHost(array("adapter" => "mysql", "username" => "test", "password" => "", "dbname" => "test")); /** * 实例化组件入口类 */ $db = new LtDb(); $db->configHandle->addConfig(array("db.servers" => $dcb->getServers())); $db->init(); /** * 用法 1: 直接操作数据库 * 优点:学习成本低,快速入门 * 适用场景: 1. 临时写个脚本操作数据库,不想花时间学习LtDb的查询引擎 2. 只写少量脚本,不是一个完整持续的项目,不需要SqlMap来管理SQL语句 */ $dbh = $db->getDbHandle(); $dbh->query("DROP TABLE IF EXISTS test_user"); $dbh->query("\n\t\t\tCREATE TABLE test_user (\n\t\t\tid INT NOT NULL AUTO_INCREMENT,\n\t\t\tname VARCHAR( 20 ) NOT NULL ,\n\t\t\tage INT NOT NULL ,\n\t\t\tPRIMARY KEY ( id ) \n\t\t)"); /** * 用法 2: 使用Table Gateway查询引擎 * * 优点:自动生成SQL语句 * * 适用场景: 1. 对数据表进行增简单的删查改操作,尤其是单条数据的操作 * 2. 简单的SELECT,动态合成WHERE子句 */ $tg = $db->getTDG("test_user"); /** * 运行100次,要求在1秒内运行完 */ $base_memory_usage = memory_get_usage(); $times = 100; $startTime = microtime(true); for ($i = 0; $i < $times; $i++) { $tg->insert(array("id" => $i, "name" => "lotusphp", "age" => 1)); } $dbh->query("DROP TABLE IF EXISTS test_user"); $endTime = microtime(true); $totalTime = round($endTime - $startTime, 6); $averageTime = round($totalTime / $times, 6); $memory_usage = memory_get_usage() - $base_memory_usage; $averageMemory = formatSize($memory_usage / $times); $memory_usage = formatSize($memory_usage); if (LOTUS_UNITTEST_DEBUG) { echo "\n----------------db getTDG insert----------------\n"; echo "times \t{$times}\n"; echo "totalTime \t{$totalTime}s\taverageTime \t{$averageTime}s\n"; echo "memoryUsage \t{$memory_usage}\taverageMemory \t{$averageMemory}"; echo "\n---------------------------------------------------------\n"; } $this->assertTrue(1 > $totalTime); }
/** * @dataProvider configBuilderDataProvider */ public function testConfigBuilder($singleHost, $expected) { $dcb = new LtDbConfigBuilder(); $dcb->addSingleHost($singleHost); $this->assertEquals($expected, $dcb->getServers()); }
<?php $host = substr(dirname(__FILE__), 0, strpos(__FILE__, "Admin")) . 'data/'; $dbname = 'publish.db'; $singlehost = array("adapter" => "sqlite", "host" => $host, "port" => '', "password" => "", "dbname" => $dbname, 'pconnect' => false); $dcb = new LtDbConfigBuilder(); $dcb->addSingleHost($singlehost); $config["db.servers"] = $dcb->getServers();