
发表日期: 2021-04-26 10:25:08 浏览次数:102
启东400电话申请开通【启东企业网站建设】启东微信公众号小程序开发运营价格、启东微信公众号APP软件客户端设计运营、启东网页页面设计公司费用、启东公司网站制作方案流程改版维护大概需要多少钱
启东市,江苏省直辖,南通市代管,位于江苏省东南端,长江入海口北岸,是江苏省日出最早的地方。 [1] 户籍总人口110.35万,常住人口94.95万(2019年)。 [2] 截至2020年6月,启东市下辖9个镇。 [3]
后周显德五年(958年),置海门县于东布洲,隶于通州,海门县域包括今启东中部、北部地区。民国十七年(1928年),于崇明外沙设启东县。1989年,撤销启东县,设立县级启东市。 [14] [56]
启东是全国对外开放口岸 [4] 、中国建筑之乡 [5] 、国家卫生城市 [6] 、国家园林城市 [7] 、全国文明城市 [8] 、国家级生态示范区 [9] 、节水型社会建设达标县 [10] 、紧密型县域医共体建设试点县 [11] 、革命文物保护利用片区分县 [12] ,海洋经济之乡、电动工具之乡、建筑之乡、教育之乡、版画之乡。 [1]
2019年,启东市地区生产总值1157.55亿元,第一产业增加值79.64亿元,第二产业增加值581.29亿元,第三产业增加值496.62亿元。三次产业比为6.9:50.2:42.9。人均地区生产总值121879元。
对于关联查询,简单的关联可使用NotORM封装的方式,而复杂的关联,如多个表的关联查询,则可以使用PhalApi封装的接口。
如果是简单的关联查询,可以使用NotORM支持的写法,这样的好处在于我们使用了一致的开发,并且能让PhalApi框架保持分布式的操作方式。需要注意的是,关联的表仍然需要在同一个数据库。
以下是一个简单的示例。假设我们有这样的数据:
INSERT INTO `phalapi_user` VALUES ('1', 'wx_edebc', 'dogstar', '***', '4CHqOhe1', '1431790647', '');INSERT INTO `phalapi_user_session_0` VALUES ('1', '1', 'ABC', '', '0', '0', '0', null);复制代码那么对应关联查询的代码如下面:
// SELECT expires_time, user.username, user.nickname FROM phalapi_user_session_0 // LEFT JOIN phalapi_user AS user // ON phalapi_user_session_0.user_id = user.id // WHERE (token = 'ABC') LIMIT 1$rs = DI()->notorm->user_session_0 ->select('expires_time, user.username, user.nickname')
->where('token', 'ABC')
->fetchRow();var_dump($rs);复制代码会得到类似这样的输出:
array(3) {
["expires_time"]=>
string(1) "0"
["username"]=>
string(35) "wx_edebc"
["nickname"]=>
string(10) "dogstar"}复制代码这样,我们就可以实现关联查询的操作。按照NotORM官网的说法,则是:
If the dot notation is used for a column anywhere in the query ("$table.$column") then NotORM automatically creates left join to the referenced table. Even references across several tables are possible ("$table1.$table2.$column"). Referencing tables can be accessed by colon: $applications->select("COUNT(application_tag:tag_id)").
所以->select('expires_time, user.username, user.nickname')这一行调用将会NotORM自动产生关联操作,而ON的字段,则是这个字段关联你配置的表结构,外键默认为:表名_id 。
如果是复杂的关联查询,则是建议使用原生的SQL语句,但仍然可以保持很好的写法,如这样一个示例:
$sql = 'SELECT t.id, t.team_name, v.vote_num ' . 'FROM phalapi_team AS t LEFT JOIN phalapi_vote AS v ' . 'ON t.id = v.team_id ' . 'ORDER BY v.vote_num DESC';$rows = $this->getORM()->queryAll($sql, array());var_dump($rows);复制代码
如前面所述,这里需要手动填写完整的表名,以及慎防SQL注入攻击。
有时,我们还需要进行一些其他的数据库操作,如创建表、删除表、添加表字段等。对于需要进行的数据库操作,而上面所介绍的方法未能满足时,可以使用更底层更通用的接口,即:NotORM_Result::query($query, $parameters)。
例如,删除一张表。
DI()->notorm->user->query('DROP TABLE tbl_user', array());复制代码为了应对海量用户的产品愿景需求,PhalApi设计了一个分布式的数据库存储方案,以便能满足数据量的骤增、云服务的横向扩展、接口服务开发的兼容性,以及数据迁移等问题,避免日后因为全部数据都存放在单台服务器而导致的限制。
分表策略,即是通过可配置的路由规则,将海量的数据分散存储在多个数据库表。主要涉及的内容有:
分库分表
对于不需要进行必要关联查询的数据库表,进行分库分表存放。即对于同一张数据库表,若存放的数据量是可预见式的暴增,例如每时每刻都会产生大量的来自用户发布的事件信息,为了突破 数据库单表的限制以及其他问题,需要将此数据库表创建多个副本,并按照一定规则进行拆分存放。
路由规则
在进行了分库分表后,开发人员在对数据库表进行操作时,就需要根据相应的规则找到对应的数据库和数据库表,即需要有一个参考主键。这里建议每个表都需要有数值类型的主键字段,以便作为分表的参考。
扩展字段
在完成了分库分表和制定路由规则后,考虑到日后有新增表字段而导致数据库表结构的变更。为了减少数据库变更对现有数据库表的影响,这里建议每个表都增加text类型的extra_data字段,并且使用JSON格式进行序列化转换存储。
可配置
在有了多台数据库服务器以及每个表都拆分成多张表后,为减少后端接口开发人员的压力,有必须提供可配置的支持。即:数据库的变更不应影响开发人员现有的开发,也不需要开发人员作出代码层面的改动,只需要稍微配置一下即可。
自动生成SQL语句
对于相同表的建表语句,可以通过脚本来自动生成,然后直接导入数据即可,避免人工重复编辑维护SQL建表语句。
PhalApi框架主要提供了表名 + ID与数据库服务器 + 数据库表之间的映射规则。
下面结合一个示例,讲解如何使用分表策略。假设我们有一个需要数据库分表的demo表,且各个表所映射的数据库实例如下。

启东400电话申请开通【启东企业网站建设】启东微信公众号小程序开发运营价格、启东微信公众号APP软件客户端设计运营、启东网页页面设计公司费用、启东公司网站制作方案流程改版维护大概需要多少钱
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878