不替换原系统,只加问数入口,这句话落地靠一条底线,问数平台连的是一个只读账号。原系统照常记房源、记合同、记账单,问数平台连进去只能看,改不了也删不了。
把这条线怎么焊死的过程记下来,给同样在接园区的同学参考。
图263 左边是园区系统本来的样子,右边是后来叠上去的问数入口,中间那道门只朝外开。
先划清能看哪些
园区系统里表不少,生产库、报表库、日志库都挤在一起。我们没把整库授权给问数平台。按经营主题拆出来,只把四个主题对应的视图交出去,房源、租客、合同、账单。基表一张不授权。
这么做有个直接好处。问数平台读的是加工后的结果,不是原表。原系统表结构怎么调,只要视图口径不动,问数平台那边一句问话都不用改。
图264 房子外面一道矮墙,墙上只留一道小拱门朝外开,墙里头的东西不从别处露出来。
建账号只给读
账号本身限定了来源网段,只能从问数平台那台机器连。即便口令哪天漏了,别的机器也连不上。权限上只授视图的查询,基表一律不给。
sql
-- 创建专用只读账号,限定来源网段 CREATE USER 'wenda_ro'@'10.20.%' IDENTIFIED BY '****'; -- 只授予四个经营主题视图的查询权限 GRANT SELECT ON park_bi.v_house TO 'wenda_ro'@'10.20.%'; GRANT SELECT ON park_bi.v_tenant TO 'wenda_ro'@'10.20.%'; GRANT SELECT ON park_bi.v_contract TO 'wenda_ro'@'10.20.%'; GRANT SELECT ON park_bi.v_bill TO 'wenda_ro'@'10.20.%'; -- 反向确认,账号上没有任何写权限 SHOW GRANTS FOR 'wenda_ro'@'10.20.%';SHOW GRANTS 跑出来应当只有 SELECT,看不到 INSERT、UPDATE、DELETE 任何一个。
图265 一把钥匙只插在能开的读锁上,旁边那把写锁是锁死的,钥匙根本不对。
把口径焊进视图
只给读还不够。空置率、应收实收这些算法,我们直接写在视图里。问数平台拿到的就是算好的结果,不用它再去原表拼公式。
sql
-- 把账单口径封装进视图,与原系统财务报表定义一致 CREATE VIEW park_bi.v_bill AS SELECT building_id, period, SUM(due_amount) AS receivable, -- 应收,不含预收押金 SUM(paid_amount) AS received, -- 实收 SUM(paid_amount) / NULLIF(SUM(due_amount), 0) AS collection_rate -- 收缴率 FROM fin_bill GROUP BY building_id, period;口径只存在一处。原系统财务报表怎么定义,视图就怎么算,谁后面接手都能一眼看懂,不用翻两份文档对来对去。
留一份查询底稿
只读不代表没法管。问数平台每一次查询,我们都落一条日志记录,谁、什么时间、问了什么、返回多少行。
sql
-- 查询日志表,留存每一次问数的可追溯底稿 CREATE TABLE park_bi.query_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(64), asked_at DATETIME, question TEXT, rows_returned INT, src_view VARCHAR(64) );真要出岔子,能按时间回放每一步,看清楚是哪个问法、查的哪张视图、返回了多少数据。
图266 一个上锁的箱子,箱面是空的,放大镜悬在箱子外头看。平台看得到结果,看不到箱子里原表的细节。
验证它真写不进去
配完别急着交付,拿只读账号自己试一条写操作。预期是必然报错,报出来就说明线焊死了。
sql
-- 用只读账号执行写操作,预期必然被拒 INSERT INTO fin_bill (building_id, due_amount) VALUES (3, 1000); -- ERROR 1142 (42000): INSERT command denied to user 'wenda_ro'看到 ERROR 1142 这一行,心里才踏实。原系统照常记房源、记合同、记账单,一个字没动。
图267 老房子、问数入口、小桥连成一圈,业务发生、数据沉淀、开口提问、拿结果决策,转完一轮回到业务本身。
回头看这件事
两套系统分工就是这样,一个管发生,一个管看懂。只读账号是这条分工的物理边界,不是一句挂在嘴边的口号。把边界、账号、口径、底稿四件事做齐,问数平台就是一个加在原系统上的问数入口,既不碰数据,也改不了业务。
少等一次取数,少做一次重复工作,少一次反复解释。这是我们接问数平台最实在的三句话。