日期: 2022-09-20 15:50:44 浏览数:11

上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
平凉400电话申请开通【平凉企业网站建设】平凉微信公众号小程序开发运营价格、平凉微信公众号APP软件客户端设计运营、平凉网页页面设计公司费用、平凉公司网站制作方案流程改版维护大概需要多少钱

平凉,是甘肃省辖地级市,甘肃省人民政府批复确定的甘肃省域副中心城市,丝绸之路经济带重要节点城市,陕甘宁结合部以文化旅游和工贸物流为主的生态宜居城市。截至2020年4月,全市辖1个区、1个市、5个县,总面积1.1万平方公里,2019年末常住人口212.53万人。 [1-2]
平凉地处中国西北地区,甘肃省东部,陕甘宁三省(区)交汇处,东邻陕西咸阳,西连甘肃定西、白银,南接陕西宝鸡、甘肃天水,北倚宁夏固原、甘肃庆阳。是西北地区重要的公路枢纽,欧亚大陆桥第二通道的重要中转站,甘肃东部重要的交通枢纽、商贸重镇和区域性中心城市,素有“陇上旱码头”之称。 [1]
平凉是中华文明的发祥地之一,早在3000多年前,周朝就在泾河流域创造了比较先进的农耕文化。公元376年,前秦灭前凉,取“平定凉国”之意,置平凉郡,平凉之名自此始。平凉境内历史文化遗存众多,已发现仰韶文化、齐家文化等各个时期的文化遗址2257处。崆峒山道源文化、古成纪伏羲文化、西王母远古文化、皇甫谧医学文化独具魅力。 [1]
市内有5A级旅游景区崆峒山、云崖寺、南石窟寺、泾川王母宫、崇信龙泉寺等名胜古迹,被评为中国优秀旅游城市、中国顾客最满意的十大风景名胜区、中国最值得外国人去的50个地方之一。 [1] 2018年12月,2018魅力中国城十大魅力榜单发布,平凉荣获“年度魅力文旅扶贫城市”。 [3] 2019年10月,被确定为“第三批城市黑臭水体治理示范城市”。 [4] 2020年10月,被评为全国双拥模范城(县)。
return array(
... ... 'tables' => array(
'demo' => array( 'prefix' => 'tbl_', 'key' => 'id', 'map' => array( array('db' => 'db_demo'), array('start' => 0, 'end' => 2, 'db' => 'db_demo'),
),
),
),
);上面配置map选项中array('db' => 'db_demo')用于指定缺省主表使用db_demo数据库实例,而下一组映射关系则是用于配置连续在同一台数据库实例的分表区间,即tbl_demo_0、tbl_demo_1、tbl_demo_2都使用了db_demo数据库实例。
这里再侧重讲解一下map选项。map选项用于配置数据库表与数据库实例之前的映射关系,通俗来说就是指定哪张表使用哪个数据库。不管是否使用分表存储,都至少需要配置默认缺省主表。如:
'map' => array( array('db' => 'db_demo'),
)缺省主表的配置很简单,只需要配置使用哪个数据库实例即可。而当需要使用分表时,则要增加相应的映射关系配置。通常分表以“下划线 + 连续的自然数”为后缀,作为分表的标识。在配置时,对于使用同一个数据库实例的分表区间,可以配置成一组,并使用start下标和end下标来指定分表闭区间:[start, end]。如上面示例中,[0, 2]这一区间的分表使用了db_demo这一数据库实例,则可以添加配置成:
'map' => array( array('db' => 'db_demo'), array('start' => 0, 'end' => 2, 'db' => 'db_demo'),
)假设,对于tbl_demo_2分表,需要调整成使用数据库实例db_new,则可能调整配置成:
'map' => array( array('db' => 'db_demo'), array('start' => 0, 'end' => 1, 'db' => 'db_demo'), array('start' => 2, 'end' => 2, 'db' => 'db_new'),
)配置好路由规则后,就可以使用脚本命令生成建表语句。把数据库表的基本建表语句保存到./Data目录下,文件名与数据库表名相同,后缀统一为“.sql”。如这里的./Data/demo.sql文件。
`name` varchar(11) DEFAULT NULL,
需要注意的是,这里说的基本建表语句是指:仅是这个表所特有的字段,排除已固定公共有的自增主键id、扩展字段ext_data和CREATE TABLE关键字等。
然后可以使用phalapi-buildsqls脚本命令,快速自动生成demo缺省主表和全部分表的建表SQL语句。如下:
$ ./PhalApi/phalapi-buildsqls ./Config/dbs.php demo
正常情况下,会生成类似以下的SQL语句:
CREATE TABLE `demo` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(11) DEFAULT NULL, `ext_data` text COMMENT 'json data here', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `tpl_demo_0` ... ...;CREATE TABLE `tpl_demo_1` ... ...;CREATE TABLE `tpl_demo_2` ... ...;
在将上面的SQL语句导入数据库后,或者手动创建数据库表后,便可以像之前那样操作数据库了。下面是一些大家已经熟悉的示例:
DI()->notorm->demo->where('id', '1')->fetch();假设分别的规则是根据ID对3进行求余。当需要使用分表时,在使用Model基类的情况下,可以通过重写PhalApi_Model_NotORM::getTableName($id)实现相应的分表规则。
// $ vim ./Shop/Model/demo.php<?phpclass Model_Demo extends PhalApi_Model_NotORM { protected function getTableName($id) {
$tableName = 'demo'; if ($id !== null) {
$tableName .= '_' . ($id % 3);
} return $tableName;
}
}然后,便可使用之前一样的CURD基本操作,但框架会自动匹配分表的映射。例如:
$model = new Model_Demo();
$row = $model->get('3', 'id'); // 使用分表tbl_demo_0$row = $model->get('10', 'id'); // 使用分表tbl_demo_1$row = $model->get('2', 'id'); // 使用分表tbl_demo_2当使用全局方式获取NotORM实例时,则需要手动指定分表。上面的操作等效于下面使用全局NotORM实例并指定分表的实现。
$row = DI()->notorm->demo_0->where('id', '3')->fetch();
$row = DI()->notorm->demo_1->where('id', '10')->fetch();
$row = DI()->notorm->demo_2->where('id', '2')->fetch();回到使用Model基类的上下文,更进一步,我们可以通过$this->getORM($id)来获取分表的实例从而进行分表的操作。如:
<?phpclass Model_Demo extends PhalApi_Model_NotORM {
... ... public function getNameById($id) {
$row = $this->getORM($id)->select('name')->fetchRow(); return !empty($row) ? $row['name'] : '';
}
}通过传入不同的$id,即可获取相应的分表实例。
当需要使用多个数据库时,可以先在servers选项配置多组数据库实例,然后在tables选项中为不同的数据库表指定不同的数据库实例。
假设我们有两台数据库服务器,分别叫做db_A、db_B,即:
return array( 'servers' => array( 'db_A' => array( //db_A 'host' => '192.168.0.1', //数据库域名 ... ... ), 'db_B' => array( //db_B 'host' => '192.168.0.2', //数据库域名 ... ... ), ),
若db_A服务器中的数据库有表a_table_user、a_table_friends,而db_B服务器中的数据库有表b_table_article、b_table_comments,则:
<?phpreturn array(
... ... 'tables' => array( //通用路由
'__default__' => array( 'prefix' => 'a_', //以 a_ 为表前缀
'key' => 'id', 'map' => array( array('db' => 'db_A'), //默认,使用db_A数据库
),
), 'table_article' => array( //表b_table_article
'prefix' => 'b_', //表名前缀
'key' => 'id', //表主键名
'map' => array( //表路由配置
array('db' => 'db_B'), // b_table_article表使用db_B数据库
),
), 'table_comments' => array( //表b_table_article
'prefix' => 'b_', //表名前缀
'key' => 'id', //表主键名
'map' => array( //表路由配置
array('db' => 'db_B'), // b_table_comments表使用db_B数据库
),
),
),如果项目存在分表的情况,可结合上述的分表的说明再进行配置。为了让大家更容易明白,假设db_A服务器中的数据库有表a_table_user、a_table_friends_0到a_table_friends_9(共10张表),而db_B服务器中的数据库有表b_table_article、b_table_comments_0到b_table_comments_19(共20张表),则结合起来的完整配置为:
<?phpreturn array(
... ... 'tables' => array( //通用路由
'__default__' => array( 'prefix' => 'a_', //以 a_ 为表前缀
'key' => 'id', 'map' => array( array('db' => 'db_A'), //默认,使用db_A数据库
),
), 'table_friends' => array( //分表配置
'prefix' => 'a_', //表名前缀
'key' => 'id', //表主键名
'map' => array( //表路由配置
array('db' => 'db_A'), // b_table_comments表使用db_B数据库
array('start' => 0, 'end' => 9, 'db' => 'db_A'), //分表配置(共10张表)
),
), 'table_article' => array( //表b_table_article
'prefix' => 'b_', //表名前缀
'key' => 'id', //表主键名
'map' => array( //表路由配置
array('db' => 'db_B'), // b_table_article表使用db_B数据库
),
), 'table_comments' => array( //表b_table_article
'prefix' => 'b_', //表名前缀
'key' => 'id', //表主键名
'map' => array( //表路由配置
array('db' => 'db_B'), // b_table_comments表使用db_B数据库
array('start' => 0, 'end' => 19, 'db' => 'db_B'), //分表配置(共20张表)
),
),
),
);通过这样简单配置,即可完成对多个数据库的配置,其他代码层面上对数据库的操作保持不变。
这样的设计是有明显的灵活性的,因为在后期如果需要迁移数据库服务器,我们可以在框架支持的情况下轻松应对,但依然需要考虑到一些问题和不足。
平凉400电话申请开通【平凉企业网站建设】平凉微信公众号小程序开发运营价格、平凉微信公众号APP软件客户端设计运营、平凉网页页面设计公司费用、平凉公司网站制作方案流程改版维护大概需要多少钱
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)