选用pg的优点和缺点

pg库可以看做是Redis + MySQL + Greenplum/Hadoop + Kafka/Flink + ElasticSearch的组合拳。

pg运维友好。

 

PostgreSQL的Slogan是“世界上最先进的开源关系型数据库”,但我觉得这口号不够清晰,啥叫‘先进’?而且一看就是在怼MySQL那个“世界上最流行的开源关系型数据库”的口号,有碰瓷之嫌。要我说最能生动体现PG特色的描述应该是:一专多长的全栈数据库,一招鲜吃遍天。

 

全栈数据库

成熟的应用可能会用到许许多多的数据组件(功能):缓存,OLTP,OLAP/批处理/数据仓库,流处理/消息队列,搜索索引,NoSQL/文档数据库,地理数据库,空间数据库,时序数据库,图数据库。传统的架构选型呢,可能会组合使用多种组件,典型的如:Redis + MySQL + Greenplum/Hadoop + Kafka/Flink + ElasticSearch,一套组合拳基本能应付大多数需求了。不过比较令人头大的就是异构系统集成了:大量的代码都是重复繁琐的搬砖代码,干着把数据从A组件搬运到B组件的事情。

 

在这里,MySQL就只能扮演OLTP关系型数据库的角色,但如果是PostgreSQL,就可以身兼多职,One handle them all,比如:

OLTP:事务处理是PostgreSQL的本行

OLAP:citus分布式插件,ANSI SQL兼容,窗口函数,CTE,CUBE等高级分析功能,任意语言写UDF

流处理:PipelineDB扩展,Notify-Listen,物化视图,规则系统,灵活的存储过程与函数编写

时序数据:timescaledb时序数据库插件,分区表,BRIN索引

空间数据:PostGIS扩展(杀手锏),内建的几何类型支持,GiST索引。

搜索索引:全文搜索索引足以应对简单场景;丰富的索引类型,支持函数索引,条件索引

NoSQL:JSON,JSONB,XML,HStore原生支持,至NoSQL数据库的外部数据包装器

数据仓库:能平滑迁移至同属Pg生态的GreenPlum,DeepGreen,HAWK等,使用FDW进行ETL

图数据:递归查询

缓存:物化视图

 

以擴展作六器,禮天地四方。

以FDW禮天,以Greenplum禮地,

以Citus禮東方,以Timescale禮南方,

以PostGIS禮西方,以Pipeline禮北方。

——《周禮·辟吉》

在探探的旧版架构中,整个系统就是围绕PostgreSQL设计的。几百万日活,几百万全局DB-TPS,几百TB数据的规模下,数据组件只用了PostgrSQL。独立的数仓,消息队列和缓存都是后来才引入的。而且这只是验证过的规模量级,进一步压榨PG是完全可行的。

因此,在一个很可观的规模内,PostgreSQL都可以扮演多面手的角色,一个组件当多种组件使。虽然在某些领域它可能比不上专用组件,至少都做的都还不赖。而单一数据组件选型可以极大地削减项目额外复杂度,这意味着能节省很多成本。它让十个人才能搞定的事,变成一个人就能搞定的事。对绝大多数应用而言,终其生命周期都不会有超出Pg能力范围之外的数据量级。为了不需要的规模而设计是白费功夫,实际上这属于过早优化的一种形式。此外,只有当没有单个软件能满足你的所有需求时,才会存在分拆集成的利弊权衡。集成多种异构技术是相当棘手的工作,如果真有那么一样技术可以满足你所有的需求,那么使用该技术就是最佳选择,而不是试图用多个组件来重新实现它。当业务规模增长到一定量级时,可能不得不使用基于微服务/总线的架构,将数据库的功能分拆为多个组件。但PostgreSQL的存在极大地推后了这个权衡到来的阈值,而且分拆之后依然能继续发挥重要作用。

运维友好

当然除了功能强大之外,Pg的另外一个重要的优势就是运维友好。有很多非常实用的特性:

DDL能放入事务中,删表,TRUNCATE,创建函数,索引,都可以放在事务里原子生效,或者回滚。这就能进行很多骚操作,比如在一个事务里通过RENAME,完成两张表的王車易位。

能够并发地创建、删除索引,添加非空字段,重整索引与表(不锁表)。这意味着可以随时在线上不停机进行重大的模式变更,按需对索引进行优化。

复制方式多样:段复制,流复制,触发器复制,逻辑复制,插件复制等等。这使得不停服务迁移数据变得相当容易:复制,改读,改写三步走,线上迁移稳如狗。

提交方式多样:异步提交,同步提交,法定人数同步提交。这意味着Pg允许在C和A之间做出权衡与选择,例如交易库使用同步提交,普通库使用异步提交。

系统视图非常完备,做监控系统相当简单。

FDW的存在让ETL变得无比简单,一行SQL就能解决。FDW可以方便地让一个实例访问其他实例的数据或元数据。在跨分区操作,数据库监控指标收集,数据迁移等场景中妙用无穷。同时还可以对接很多异构数据系统。

还有很多功能,就不一一列举了。

生态健康

PostgreSQL的生态也很健康,社区相当活跃。相比MySQL,PostgreSQL的一个巨大的优势就是协议友好。PG采用类似BSD/MIT的PostgreSQL协议,差不多理解为只要别打着Pg的旗号出去招摇撞骗,随便你怎么搞,换皮出去卖都行。君不见多少国产数据库,或者不少“自研数据库”实际都是Pg的换皮或二次开发产品。当然,也有很多衍生产品会回馈主干,比如,,这些基于PG的“数据库”,最后都变成了原生PG的插件。很多时候你想实现个什么功能,一搜就能找到对应的插件或实现。开源嘛,还是要讲一些情怀的。Pg的代码质量相当之高,注释写的非常清晰。C的代码读起来有种Go的感觉,代码都可以当文档看了。能从中学到很多东西。相比之下,其他数据库,比如MongoDB,看一眼我就放弃了读下去的兴趣。而MySQL呢,社区版采用的是GPL协议,这其实挺蛋疼的。要不是GPL传染,怎么会有这么多基于MySQL改的数据库开源出来呢?而且MySQL还在乌龟壳的手里,让自己的蛋蛋攥在别人手中可不是什么明智的选择,更何况是业界毒瘤呢?Facebook修改React协议的风波就算是一个前车之鉴了。

问题

当然,要说有什么缺点或者遗憾,那还是有几个的:

因为使用了MVCC,数据库需要定期VACUUM,需要定期维护表和索引避免膨胀导致性能下降。

没有很好的开源集群监控方案(或者太丑!),需要自己做。

慢查询日志和普通日志是混在一起的,需要自己解析处理。

官方Pg没有很好用的列存储,对数据分析而言算一个小遗憾。

当然都是些无关痛痒的小毛小病,不过真正的问题可能和技术无关……说到底,MySQL确实是最流行的开源关系型数据库,没办法,写Java的,写PHP的,很多人最开始用的都是MySQL…,所以Pg招人相对困难是一个事实,很多时候只能自己培养。不过看DB Engines上的流行度趋势,未来还是很光明的。

 

转载:https://cloud.tencent.com/developer/news/238457

<think>好的,用户现在想了解如何在不使用定时芯片的情况下,用RC延时电路实现不需要高精度的延时。首先,我需要确认用户的具体需求应用场景。可能用户希望降低成本,或者应用场景对延时精度要求不高,比如简单的时序控制、LED闪烁等。 接下来,我要回顾之前的回答,用户之前询问的是如何通过晶体管方案提高可靠性,而这次的问题转向了RC延时的应用,且不需要精确性。因此,我需要调整思路,重点放在RC延时的设计、优缺点以及如何优化其可靠性,同时避免使用定时芯片。 用户可能没有明确说出的需求是成本敏感,或者电路空间有限,所以选择简单的RC方案。但需要确保即使精度不高,也能满足基本功能。同时,用户可能关心如何提高这种简单电路的稳定性抗干扰能力,特别是在环境变化如温度波动时如何保持基本功能。 首先,我需要解释RC延时的基本原理,包括时间常数的计算,影响延时的因素,如电阻、电容的容差温度系数。然后,列举常见的RC延时电路结构,比如单稳态触发器、555定时器电路(虽然555是芯片,但用户可能允许使用基本IC),或者基于晶体管的简单延时电路。 不过用户提到“不用定时芯片”,所以可能需要完全使用分立元件,如晶体管、电阻、电容来搭建延时电路。这种情况下,需要讨论如何设计这样的电路,如何调整延时时间,以及如何补偿温度等因素的影响。 然后,分析RC延时的优缺点优点包括结构简单、成本低,缺点主要是精度低、受环境因素影响大。需要给出实际应用中的建议,比如在哪些场合适合使用,如何通过电路设计减少外界干扰的影响。 可能用户在实际应用中遇到了RC延时不稳定,或者延时时间波动的问题,所以想知道如何优化。这时候需要提供一些改进措施,比如选择温度系数低的元件,使用稳压电源,添加滤波电容,或者通过调整电路结构提高稳定性。 此外,可能需要对比不同电路结构的性能,比如使用施密特触发器来改善波形,避免因噪声导致误触发。还可以讨论如何通过实验校准延时时间,比如使用可调电阻进行微调,或者在批量生产中筛选元件。 最后,总结使用RC延时的适用场景,给出设计步骤注意事项,帮助用户在实际应用中正确选择设计电路,避免常见问题。同时,提醒用户如果对延时精度有更高要求,还是需要考虑使用定时芯片或其他方案。</think>### 一、RC延时电路基础设计 **适用场景**: - 时序要求宽松(误差允许±20%以上) - 低成本应用(物料成本<¥0.5) - 简单状态保持(如电机启动延时、LED渐灭等) **典型电路结构**: ``` [触发信号] → 限流电阻 → RC充电回路 → 晶体管阈值触发 → 输出控制 ↑ ↑ [电源] [泄放二极管] ``` **时间常数计算**: $$ t \approx 1.1RC $$ (当阈值电压为电源电压的63%时) --- ### 二、关键元件选型策略 #### 1. **电阻选择原则** | 参数 | 推荐规格 | 作用说明 | |--------------|-------------------|------------------------| | 阻值范围 | 10kΩ~1MΩ | 控制充电速度 | | 温度系数 | <±200ppm/℃ | 降低温漂影响 | | 类型 | 金属膜电阻 | 低噪声、高稳定性 | #### 2. **电容选择指南** | 参数 | 推荐规格 | 适用场景 | |--------------|-------------------|------------------------| | 材质 | X7R陶瓷电容 | 通用型(温度稳定性好) | | | 铝电解电容 | 大容量需求(>100μF) | | 耐压值 | ≥2倍工作电压 | 避免漏电流增大 | #### 3. **晶体管增强配置** - 使用达林顿结构(如2SD882)提升驱动能力 - 基极串联100kΩ电阻防止误触发 - 集电极-发射极间并联10nF电容滤波 --- ### 三、精度控制方案(无定时芯片) **误差来源及补偿措施**: | 误差因素 | 典型影响 | 补偿方法 | |----------------|-----------------|------------------------------| | 温度漂移 | ±5%/10℃ | 选用NP0/C0G电容(±30ppm/℃) | | 电源波动 | 1%/V | 增加稳压二极管(如1N4742A) | | 元件容差 | ±20% | 并联可调电阻(3296型多圈电位器)| | 漏电流 | 1~10μA | 加入泄放电阻(R≥10×充电电阻)| **实测对比数据**: ```plaintext 设计目标延时:5s 测试条件:25℃, 12V供电 配置方案 | 实测结果 | 温漂(-40℃~+85℃) ----------------|---------------|------------------- 普通铝电解电容 | 4.2s~6.1s | +35%/-28% X7R+金属膜电阻 | 4.8s~5.4s | +7%/-6% 可调电阻校准版 | 4.95s~5.05s | ±3% ``` --- ### 四、可靠性提升措施 #### 1. **电源净化设计** - 前级增加LC滤波:$L=100μH$, $C=220μF+0.1μF$ - 关键节点添加TVS二极管(SMAJ5.0A) #### 2. **抗干扰优化** - 信号输入端串联磁珠(BLM18PG121SN1) - PCB走线包地处理(形成guard ring) - 触发阈值设置滞回(通过并联正反馈电阻) #### 3. **环境适应性改进** - 高温环境:电容降额使用(额定电压×0.6系数) - 潮湿环境:涂覆三防漆(厚度≥25μm) - 振动环境:使用硅胶固定电容 --- ### 五、典型应用电路 **带滞回功能的改进型RC延时**: ``` +12V │ ┌─┴─┐ │ R1 100k │ │ 触发信号─┼─┬─┤ C1 47μF │ │ │ └─┼─┘ │ ├─→ 2N5551基极 │ R2 1MΩ(泄放电阻) │ GND ``` **参数说明**: - 理论延时:$t=1.1×R1×C1=1.1×100k×47μ=5.17s$ - 滞回电压:通过R2设置约0.6V回差 - 最大驱动电流:50mA(可驱动小型继电器) --- ### 六、生产调试要点 1. **参数校准**: - 使用可调电阻临时替代R1 - 实测调整至目标时间后测量阻值 - 替换为固定电阻时选用E24系列最接近值 2. **老化测试**: - 85℃高温下连续工作24小时 - 监测延时时间漂移应<±10% 3. **质量控制**: - 电容预先筛选(容量误差±5%以内) - 电阻批次一致性检测(阻值差异<±2%) --- ### 七、与定时芯片方案对比 | 对比项 | RC延时方案 | 定时芯片方案 | |----------------|--------------------------|------------------------| | 成本 | ¥0.2~0.5 | ¥1.5~3.0 | | 精度 | ±20% | ±1% | | 温度稳定性 | 需额外补偿 | 内置温度补偿 | | 可编程性 | 固定延时 | 多档可调 | | 抗干扰能力 | 需外围电路增强 | 芯片内置滤波 | | 适用场景 | 消费电子、简单控制 | 工业控制、精密时序 | --- ### 八、故障排查指南 **常见异常及对策**: 1. **延时过短**: - 检查电容漏电流(替换新电容测试) - 测量电源电压是否过低 - 确认泄放电阻是否阻值过小 2. **无法复位**: - 检测晶体管是否击穿 - 检查泄放回路是否开路 - 验证触发信号下降沿是否陡峭 3. **时间波动大**: - 使用示波器观察充电曲线 - 检查电源纹波(应<50mVpp) - 确认是否存在电磁干扰源 --- 该方案通过精心选型电路优化,可在不依赖定时芯片的情况下实现满足一般需求的延时功能。如需更高可靠性,建议在关键节点增加电压监控电路(如TL7705)作为补充保护。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值