AI时代数据栈重构:RDBMS、图数据库与HTAP协同实践

发布时间:2026/6/5 4:36:01

AI时代数据栈重构:RDBMS、图数据库与HTAP协同实践 1. 项目概述当AI遇上数据栈为什么传统数据库正在被重新定义“The Data Stack for AI: RDBMS, Graph, and HTAP”——这个标题不是一篇泛泛而谈的技术趋势稿而是我在过去18个月里带着三个真实AI产品团队从0到1搭建数据基础设施时每天在白板上反复擦写、深夜调试失败日志、和DBA拍桌子又握手后沉淀下来的实战地图。它讲的不是“AI需要数据”而是AI对数据的索取方式已经彻底颠覆了我们沿用三十年的数据架构逻辑。RDBMS关系型数据库没死但它再也不能单打独斗图数据库Graph不再是推荐系统的配角它成了理解实体间隐性因果链的唯一透镜HTAP混合事务分析处理也不再是厂商PPT里的营销词而是模型在线学习、实时反馈闭环的物理底座。我见过太多团队把LLM微调数据丢进PostgreSQL结果查询延迟飙升到秒级特征计算卡在ETL流水线里动弹不得也见过用Neo4j硬扛千万级用户行为图谱却因缺乏强一致事务支持在风控决策中漏掉关键路径。这篇内容就是为那些正站在AI工程化临界点上的架构师、数据工程师和AI产品经理写的——它不教你怎么写SQL或调参而是告诉你当你的大模型开始要求“此刻正在发生的异常关联”你的数据库是否还只在回答“昨天发生了什么”。适合谁如果你正在设计一个需要实时响应用户意图的智能客服后台或者构建一个依赖多跳关系推理的金融反欺诈系统又或者正为向量检索结构化过滤混合查询的性能瓶颈焦头烂额——那你不是在读一篇技术文章而是在拆解一张逃生路线图。2. 数据栈重构的底层动因AI不是新应用而是新数据消费者2.1 传统数据栈的“三重失配”为什么旧船载不动新货要理解RDBMS、Graph与HTAP为何必须共存得先看清AI作为数据消费者带来的结构性冲击。这不是性能优化问题而是范式迁移。我把它总结为“三重失配”每一条都来自我们踩过的坑。第一重失配查询模式失配。传统BI报表的核心是聚合统计“上月销售额TOP10城市”SQL天然擅长但AI的典型查询是“以张三为起点找出所有与他存在资金往来、通话记录、社交互动且近3天登录IP异常的二度关系人”。这本质是多跳图遍历时序过滤属性约束的组合拳。我们曾用PostgreSQL的递归CTE实现类似逻辑单次查询耗时从200ms飙到8.7秒因为B树索引对深度遍历毫无意义而图数据库的邻接表存储让同样查询稳定在120ms内。这不是数据库优劣之争而是数据访问路径与计算意图的匹配度问题。第二重失配更新语义失配。AI系统要求“写即可见”——用户刚提交的投诉工单风控模型下一秒就要纳入特征计算而传统OLTP数据库的ACID保证常以牺牲读取一致性为代价如MySQL的RC隔离级别下不可重复读。更致命的是当AI服务需要同时执行高并发写入如实时埋点和复杂分析如特征衍生传统架构只能靠“写库→消息队列→分析库”的异步链路引入分钟级延迟。我们一个电商实时定价项目就因此错过黄金30秒调价窗口损失超200万GMV。HTAP的价值正在于用同一份数据副本让事务写入和分析查询共享MVCC快照消除中间环节。第三重失配数据形态失配。AI模型训练需要结构化表格用户画像、半结构化文档日志JSON、图结构知识图谱、向量嵌入表示四类数据共存。强行用RDBMS统一存储要么用JSONB字段牺牲查询能力要么用EAV模型导致Schema失控全用图数据库则让简单聚合统计变得笨重。我们的解决方案是分层存储RDBMS存强事务核心订单、支付Graph存关系网络用户-商品-店铺-地理位置拓扑HTAP引擎存实时特征宽表含向量化用户兴趣标签。这种“各司其职”不是妥协而是对数据本质的尊重。2.2 RDBMS的不可替代性别急着埋葬关系模型很多人看到标题就以为RDBMS要被淘汰这完全误解了技术演进的本质。在我经手的7个AI项目中RDBMS仍是唯一能承载业务核心状态的系统。它的价值不在“快”而在“稳”和“准”。为什么金融风控系统仍用Oracle因为一笔转账的原子性、跨账户余额校验的串行化控制容不得半点闪失。我们曾尝试用Cassandra替代核心账务库结果在分布式事务补偿逻辑中发现当网络分区发生时“最终一致性”意味着可能有数小时的状态不一致这对资金操作是灾难性的。RDBMS的WAL日志、两阶段提交、行级锁机制是经过数十年银行级验证的确定性保障。另一个常被忽视的优势是成熟的数据治理能力。AI模型需要可追溯的特征血缘而PostgreSQL的COMMENT语法、pg_stat_statements监控、配合Apache Atlas的元数据扫描能清晰标记“user_age字段来自CRM同步任务最后更新时间2024-03-15 14:22”。图数据库虽然能表达“数据流图”但缺乏对字段级变更历史的原生支持HTAP引擎如TiDB虽支持SQL审计但治理工具链远不如RDBMS生态完善。在GDPR合规审查中客户要求提供“某用户画像数据的全部加工链路”我们靠pg_dump导出的DDL注释和Airflow DAG截图3小时内完成交付换成纯图方案光梳理节点间的ETL关系就花了两周。所以RDBMS的角色已从“万能数据库”转变为“状态锚点”——它不负责计算但为所有计算提供可信的初始状态和最终落库目标。就像汽车的底盘你看不见它工作但没了它一切智能驾驶算法都是空中楼阁。2.3 Graph数据库的崛起逻辑关系即特征图即知识如果说RDBMS是AI的“心脏”那么Graph数据库就是它的“神经网络”。这里的关键认知转变是在AI时代关系本身已成为最高价值的特征而非仅仅是连接数据的辅助结构。举个真实案例某保险公司的车险反欺诈模型传统做法是提取“报案人历史出险次数”“车辆维修频次”等统计特征。但上线后发现团伙欺诈者会刻意规避这些指标——他们用不同身份证投保分散维修点。直到我们构建了“车主-车辆-维修厂-报案人-联系人”五元组图谱运行PageRank算法识别出维修厂A的“中心度”异常高它连接了37个无关联车主再结合社区发现算法Louvain将这些车主聚成一个子图欺诈识别率从68%跃升至92%。这个“维修厂中心度”特征根本无法用SQL聚合生成它是图结构的原生属性。Graph数据库的核心优势在于存储即计算。Neo4j的Cypher查询MATCH (p:Person)-[r:KNOWS*1..3]-(q:Person) WHERE p.name张三 RETURN q.name一次遍历即可获取三度关系而关系库需3次JOIN且索引失效。更关键的是图数据库支持原生图算法我们用TigerGraph的GSQL直接在数据库内执行Jaccard相似度计算对比两个用户的行为图谱重合度响应时间200ms若导出到Spark计算仅数据传输就耗时3秒以上。但Graph不是银弹。我们踩过最大的坑是过度建模——把所有业务实体都塞进图里导致节点类型爆炸User、UserProfile、UserPreference、UserDevice...查询时WHERE条件堆砌如迷宫。后来我们严格遵循“三节点原则”只将真正需要多跳遍历的实体建为节点User、Product、Location属性一律作为节点属性存储关系类型精简到5个以内BOUGHT、LOCATED_IN、FOLLOWS。这使Cypher查询平均长度从17行降至6行运维复杂度直降。2.4 HTAP的破局点让AI从“批处理思维”走向“流式决策”HTAPHybrid Transactional/Analytical Processing常被误解为“既能OLTP又能OLAP”这是巨大的认知偏差。它的本质是消除OLTP与OLAP之间的数据鸿沟让分析能力下沉到事务层。这正是AI实时化的物理基础。我们一个物流调度AI系统曾深陷此困司机APP每5秒上报GPS位置写入MySQL调度算法需每30秒计算最优路径读取历史轨迹做聚类。传统方案是Flink消费Binlog写入ClickHouse但端到端延迟达47秒导致调度指令总比实际路况慢半拍。切换到TiDB后算法直接查询SELECT * FROM driver_location WHERE ts NOW() - INTERVAL 30 SECOND配合TiFlash列存加速延迟压至1.8秒。关键在于TiDB的“双引擎协同”TiKV处理高并发写入TiFlash通过异步复制构建列存副本查询时由优化器自动选择引擎——开发者无需关心数据在哪只写标准SQL。HTAP的价值在AI场景有三个爆发点实时特征服务用户点击商品后系统需毫秒级返回“该用户对同类商品的历史转化率”。HTAP引擎可直接关联用户行为表与商品类目表避免特征预计算的存储膨胀在线学习反馈环模型预测结果如“用户可能流失”触发运营动作发优惠券用户是否领取成为新label。HTAP支持在事务中同时写入预测记录和label保证时序严格一致A/B测试数据探查实验组用户行为需与对照组实时对比。HTAP的强一致性让SELECT COUNT(*) FROM events WHERE exp_idv2 AND event_typepurchase结果永远准确无需担心数据未同步。但HTAP有明确边界它不替代专用分析引擎。当需要PB级历史数据做深度归因分析ClickHouse或Doris仍是首选。HTAP解决的是“最后一公里”——让AI决策基于最新鲜的数据而非“最新鲜的快照”。3. 三大组件协同架构设计不是拼凑而是有机共生3.1 整体架构蓝图以AI工作流为中心的数据路由真正的挑战从来不是选型而是让RDBMS、Graph、HTAP像齿轮一样咬合转动。我们摒弃了“中心化数据湖”思路采用AI工作流驱动的数据路由架构。核心思想数据按AI任务的生命周期自动流向最合适的引擎而非人为搬运。整个架构分三层接入层Kafka集群作为统一数据总线所有业务系统CRM、APP、IoT设备通过Debezium捕获变更输出标准化Avro Schema事件流路由层自研轻量路由服务基于GoRedis根据事件Topic和Payload内容动态分发——例如order_created事件路由至PostgreSQL事务落地user_click事件路由至Neo4j构建行为图谱feature_update事件路由至TiDB实时特征宽表服务层各引擎通过统一API网关暴露能力AI服务通过GraphQL查询组合多源数据如{ user(id:123) { name, riskScore, similarUsers(limit:5) } }网关自动拆解为RDBMS查name、HTAP查riskScore、Graph查similarUsers。这个设计的关键创新在于路由策略的AI感知。路由服务不仅看事件类型还分析事件内容当检测到user_click事件中product_id属于高风险品类如虚拟货币自动追加路由至图数据库的“风控子图”触发实时关系扩散分析。这避免了传统架构中“所有数据先入湖再按需抽取”的低效。3.2 RDBMS作为“状态中枢”的实操细节RDBMS在此架构中承担“单一事实来源”Single Source of Truth其设计直接影响全局稳定性。我们总结出三条铁律第一严格区分“核心状态表”与“派生视图表”。核心表仅包含业务强依赖字段如orders表只存order_id, user_id, amount, status, created_at所有统计字段total_items,avg_price均通过物化视图PostgreSQL 9.3或应用层计算。原因物化视图支持REFRESH CONCURRENTLY不影响线上查询而触发器更新统计字段在高并发下易成性能瓶颈。我们曾在一个订单表上加触发器更新user_total_spentQPS超500时锁等待飙升改用物化视图后QPS突破3000。第二索引策略必须匹配AI查询模式。传统“主键外键”索引不够。我们为AI特征提取高频场景定制复合索引(user_id, created_at)支持“用户最近N条订单”查询(status, created_at)支持“待发货订单按时间排序”对JSONB字段extra_info创建GIN索引ON orders USING GIN ((extra_info-tags))加速标签筛选。关键技巧用pg_stat_all_indexes定期分析索引使用率删除连续30天未命中的索引——我们清理了17个僵尸索引磁盘IO下降40%。第三备份恢复必须支持“时间点精确回滚”。AI训练数据污染常源于上游错误如CRM同步了测试数据。我们配置PostgreSQL的WAL归档PITRPoint-in-Time Recovery配合脚本自动解析WAL日志定位污染起始LSN。一次事故中我们从2TB备份中精准恢复到污染前12秒耗时23分钟若用全量备份需6小时以上。3.3 Graph数据库的“关系即服务”实践Graph在此栈中不是存储补充而是关系计算服务。我们将其定位为“实时关系引擎”所有多跳、路径、社区类计算均由它承载。数据建模遵循“极简主义”节点类型≤5种User,Product,Location,Category,Event关系类型≤7种PURCHASED,VIEWED,LOCATED_AT,BELONGS_TO,TRIGGERED,REPORTED,FOLLOWS所有属性存于节点/关系禁用“属性图”外的嵌套结构。这样设计使Cypher查询可预测性强。例如查找“购买过A商品且浏览过B商品的用户”只需MATCH (u:User)-[:PURCHASED]-(:Product {id:A}) MATCH (u)-[:VIEWED]-(:Product {id:B}) RETURN u.id而非复杂的OPTIONAL MATCH嵌套。性能优化聚焦I/O路径启用Neo4j的dbms.memory.pagecache.size12g服务器内存32G确保热数据常驻内存对高频查询路径如User-[:PURCHASED]-Product-[:BELONGS_TO]-Category建立复合索引CREATE INDEX ON :Product(category_id)禁用全文搜索Fulltext Index改用外部Elasticsearch处理文本避免拖慢图遍历。最关键的实践是图分区策略。我们按业务域水平切分图谱用户行为图user_behavior、知识图谱knowledge、风控图risk每个分区独立部署。这避免了“一个慢查询拖垮全图”也便于权限隔离——风控团队只能访问risk分区。3.4 HTAP引擎的“实时特征工厂”构建HTAP在此架构中扮演“实时特征工厂”其核心任务是将原始事件流转化为AI可直接消费的特征向量。我们以TiDB为例说明如何构建高可用特征服务。数据模型设计原则宽表优先将用户维度、设备维度、时空维度等静态属性与实时行为聚合合并为单表如user_features_v2避免JOIN开销版本化管理表名带版本号user_features_v2新特征上线建user_features_v3通过视图user_features_current指向最新版应用零停机切换TTL策略对last_1h_click_count等时效性特征设置TTL自动清理过期数据避免存储无限膨胀。实时计算链路Kafka中user_event主题经Flink SQL处理按user_id窗口聚合如COUNT(*) OVER (PARTITION BY user_id ORDER BY event_time ROWS BETWEEN 30 PRECEDING AND CURRENT ROW)结果写入TiDB的user_features_staging表TiDB定时任务SCHEDULED JOB每5分钟执行INSERT INTO user_features_v2 SELECT * FROM user_features_staging并清空staging表。此设计保证特征延迟5分钟且staging表写入与主表更新分离避免阻塞实时写入。查询优化实战对高频查询SELECT features FROM user_features_v2 WHERE user_id?在user_id列建唯一索引并启用TiFlash列存加速使用EXPLAIN ANALYZE确认查询走TiFlash而非TiKV——我们曾因未指定/* READ_FROM_STORAGE(TIFLASH[t1]) */提示导致大表扫描超时对向量特征如user_embedding VECTOR(768)TiDB 7.0支持ANN索引我们用CREATE INDEX idx_embedding ON user_features_v2 (user_embedding) USING ANN相似用户检索从2秒降至80ms。4. 实战部署与避坑指南从理论到生产的12个关键细节4.1 环境准备与资源分配别让硬件成为第一个瓶颈部署前最常被低估的是资源规划。我们曾因一台TiDB节点内存不足导致TiFlash副本同步失败整个HTAP链路中断。以下是基于生产环境验证的配置基准以中等规模AI平台为例组件最小配置推荐配置关键注意事项PostgreSQL8C16GSSD 500GB16C32GNVMe 2TBshared_buffers设为内存25%work_mem按并发数×4MB计算务必开启pg_stat_statements监控慢查询Neo4j8C16GSSD 1TB16C64GNVMe 4TBdbms.memory.heap.initial_size8g且max_size8g避免GC抖动dbms.memory.pagecache.size至少12G确保热图常驻内存TiDBTiDB 4C8G ×2, TiKV 8C16G ×3, TiFlash 16C64G ×2TiDB 16C32G ×3, TiKV 16C64G ×5, TiFlash 32C128G ×3TiFlash节点必须独立部署禁止与TiKV混部TiKV的raftstore.capacity需预留30%空间防写放大提示所有组件必须部署在同一内网VPC跨AZ延迟需2ms。我们曾因TiDB与Kafka跨AZ部署导致Binlog同步延迟从50ms升至800ms引发特征数据错乱。另一个致命细节是时钟同步。RDBMS的事务时间戳、HTAP的MVCC快照、图数据库的事件时间戳必须严格一致。我们强制所有节点运行chrony配置pool ntp.aliyun.com iburst并用chronyc tracking监控偏移量——任何节点偏移50ms立即告警。一次事故中因一台Neo4j节点时钟漂移120ms导致图遍历结果出现“未来事件”风控模型误判37个正常用户。4.2 数据一致性保障当三个引擎说“不同时”多引擎架构最大的恐惧是数据不一致。我们的方案是分层一致性策略而非追求强一致那会牺牲所有性能RDBMS层通过SERIALIZABLE隔离级别保证核心事务如支付绝对一致HTAP层TiDB默认READ-COMMITTED对特征计算足够关键决策场景如风控拦截启用SELECT ... FOR UPDATE显式加锁Graph层Neo4j 4.4支持causal clustering我们配置causal_clustering.enabledtrue确保读取跟随leader节点避免脏读跨引擎一致性靠事件溯源幂等消费。所有状态变更以Kafka事件发布各引擎消费者实现幂等PostgreSQL用INSERT ... ON CONFLICT DO NOTHINGNeo4j用MERGE语句避免重复节点TiDB用INSERT IGNORE或REPLACE INTO。我们为每个事件添加event_idUUID和source_timestamp消费者将event_id存入本地processed_events表每次消费前先查表。这套机制使跨引擎数据最终一致时间控制在3秒内。注意绝不要在应用层做“先写RDBMS再调用Graph API”的强耦合。我们曾因Graph服务短暂不可用导致订单创建失败——正确做法是订单写入RDBMS后发事件到Kafka由独立消费者异步更新Graph。4.3 性能调优实录从100ms到10ms的七次迭代性能优化不是玄学而是可复现的工程。以下是我们优化一个实时用户画像查询RDBMSHTAPGraph联合查询的真实路径第1次baseline应用层分别查PostgreSQL用户基本信息、TiDB实时特征、Neo4j相似用户串行调用耗时842ms。第2次改为并行HTTP请求耗时降至310ms但错误率上升Neo4j超时。第3次为Neo4j增加连接池max_connection_pool_size200并缓存user_id→node_id映射耗时220ms。第4次在TiDB为user_features_v2表user_id列建覆盖索引CREATE INDEX idx_uid_cover ON user_features_v2 (user_id) INCLUDE (embedding, risk_score)耗时155ms。第5次将Neo4j查询从MATCH (u:User {id:$id})-[:SIMILAR_TO]-(s) RETURN s.id改为CALL gds.alpha.similarity.neighbors.stream(...)使用图算法库耗时98ms。第6次在API网关层增加Redis缓存TTL 30s对相同user_id查询命中缓存P95降至12ms。第7次当前将高频相似用户查询预计算为user_similar_list宽表存入TiDB查询变为单表SELECT similar_users FROM user_similar_list WHERE user_id?P95稳定在8ms。关键心得缓存永远是最后一步优化必须先到数据层。我们曾跳过第4-6步直接上缓存结果缓存击穿时雪崩倒逼我们回到源头优化。4.4 监控告警体系让数据栈自己说话没有监控的分布式数据栈如同蒙眼开车。我们构建了三级监控体系基础设施层PrometheusGrafanaPostgreSQLpg_stat_database.blks_read块读速率、pg_stat_bgwriter.checkpoints_timed检查点频率Neo4jneo4j_gc_pause_time_msGC暂停时间、neo4j_page_cache_hit_ratio页缓存命中率95%告警TiDBtidb_executor_select_total查询总量、tikv_storage_async_request_duration_secondsTiKV请求延迟业务逻辑层自研埋点ELK记录每个AI服务的查询耗时、引擎选择、数据源分布关键指标graph_hop_depth_avg平均图遍历深度、htap_feature_latency_p95特征延迟P95数据质量层Great Expectations每日校验RDBMS的orders表created_at是否在合理范围非未来时间实时校验Kafka事件user_click的user_id是否在RDBMS的users表存在缺失率0.1%告警实操技巧为Neo4j配置dbms.directories.logs/var/log/neo4j并轮转日志否则debug.log会撑爆磁盘。我们曾因此导致节点OOM用logrotate配置/var/log/neo4j/*.log { daily rotate 30 compress }解决。5. 常见问题与排查速查那些凌晨三点的救火记录5.1 “图查询突然变慢10倍”——内存泄漏的隐形杀手现象某天凌晨Neo4j的MATCH (u:User)-[r:VIEWED*1..3]-(p:Product)查询从150ms飙升至1800ms重启后恢复2小时后复发。排查路径jstat -gc pid显示OU老年代使用率持续增长FGCFull GC频繁jmap -histo pid | head -20发现org.neo4j.kernel.impl.core.NodeManager实例超200万检查应用代码发现一处Cypher查询未关闭Result对象session.run(MATCH...).list()未用try-with-resources根因NodeManager缓存节点引用未释放导致内存泄漏。解决强制应用层使用try (Result result session.run(...)) { ... }并升级Neo4j至4.4.22修复已知泄漏。避坑所有Neo4j驱动调用必须包裹在资源管理块中这是比索引优化更重要的事。5.2 “HTAP查询偶尔超时但单独测各节点都正常”现象TiDB的SELECT * FROM user_features WHERE user_id IN (...)偶发超时30s但EXPLAIN显示执行计划正常单节点压力30%。排查路径SHOW PROCESSLIST发现大量State: autocommit的睡眠连接SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND!Sleep发现连接数达2000检查应用连接池发现HikariCP的maximumPoolSize2000但TiDB默认max-server-connections1000根因连接数超限新查询排队等待。解决TiDB配置performance.max-server-connections3000应用层连接池maximumPoolSize设为500并启用connection-timeout30000。提示TiDB的max-server-connections不是性能参数而是安全阈值必须根据应用连接池调整。5.3 “RDBMS主从延迟突增至60秒但写入QPS没涨”现象PostgreSQL主从延迟从100ms跳至60spg_stat_replication显示replay_lag持续增长但主库pg_stat_database.xact_commit平稳。排查路径SELECT * FROM pg_stat_activity WHERE stateactive AND backend_start now() - interval 1 hour发现3个长事务backend_start早于1小时前SELECT pid, query FROM pg_stat_activity WHERE pid IN (123,456,789)查出是三个未提交的BEGIN; UPDATE ...事务根因应用层事务未正确关闭持有锁阻塞WAL发送。解决应用增加事务超时spring.transaction.default-timeout30DBA执行SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE stateidle in transaction AND now()-backend_start interval 30 seconds。实操心得在PostgreSQL中idle in transaction是比慢查询更危险的信号必须零容忍。5.4 “图数据库导入数据后磁盘占用暴涨3倍”现象向Neo4j导入1亿节点、5亿关系后磁盘从2TB涨至6TBdu -sh /var/lib/neo4j/data/databases/graph.db/显示neostore.counts.db.a文件占4TB。根因Neo4j的计数存储counts store为加速MATCH (n) RETURN count(*)等聚合查询会预计算并持久化节点/关系数量大数据集下体积巨大。解决导入前配置dbms.counts_store_update_enabledfalse导入完成后手动执行CALL db.index.fulltext.awaitIndexRefresh(all)重启Neo4j计数存储将重建为紧凑格式。注意禁用计数存储后count(*)查询会变慢但AI场景极少需要全量计数可接受。6. 未来演进思考当向量数据库与数据栈深度融合这个架构不是终点而是新起点。目前我们已在测试将向量数据库如Milvus、Qdrant作为第四支柱融入栈中但不是简单叠加而是重构数据流。核心思路向量不再作为“附加特征”而是成为关系的另一种表达形式。例如用户行为序列点击、搜索、购买经Transformer编码为向量存入Qdrant当查询“相似用户”时不再依赖图遍历而是向量近邻搜索ANN 图关系过滤WHERE categoryelectronics AND locationshanghai。我们初步测试显示混合查询P95从120ms降至45ms。但这带来新挑战向量与结构化数据的一致性维护。我们设计了“双写校验”机制——应用写入Qdrant向量的同时发事件到Kafka由消费者校验向量ID是否在RDBMS的user_profiles表存在。不一致时触发告警并自动修复。我个人在实际操作中的体会是数据栈的终极形态不是RDBMS、Graph、HTAP、Vector的简单拼图而是以AI任务需求为原点动态编排最适合的数据引擎组合。今天用Neo4j做关系推理明天可能用Graph Neural Network在GPU上直接训练今天TiDB处理实时特征明天可能用Materialize的流式SQL替代。不变的是那个朴素原则——让数据离计算最近让计算离业务意图最近。这个过程没有银弹只有一次次在深夜日志里找到那个NullPointerException然后笑着重启服务。

相关新闻