当前位置: 首页 > news >正文

淘宝客怎么样做自己的网站wordpress图片懒加载

淘宝客怎么样做自己的网站,wordpress图片懒加载,现在进入深圳需要什么条件,vultr安装wordpress前言 在谈论数据库架构和数据库优化的时候#xff0c;我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是#xff0c;这些朋友所服务的公司业务量正在#xff08;或者即将面临#xff09;高速增长#xff0c;技术方面也面临着一些挑战。…前言 在谈论数据库架构和数据库优化的时候我们经常会听到“分库分表”、“分片”、“Sharding”…这样的关键词。让人感到高兴的是这些朋友所服务的公司业务量正在或者即将面临高速增长技术方面也面临着一些挑战。 让人感到担忧的是他们系统真的就需要“分库分表”了吗“分库分表”有那么容易实践吗为此笔者整理了分库分表中可能遇到的一些问题并结合以往经验介绍了对应的解决思路和建议。   垂直分表 垂直分表在日常开发和设计中比较常见通俗的说法叫做“大表拆小表”拆分是基于关系型数据库中的“列”字段进行的。通常情况某个表中的字段比较多可以新建立一张“扩展表”将不经常使用或者长度较大的字段拆分出去放到“扩展表”中如下图所示 小结 在字段很多的情况下拆分开确实更便于开发和维护笔者曾见过某个遗留系统中一个大表中包含100多列的。某种意义上也能避免“跨页”的问题MySQL、MSSQL底层都是通过“数据页”来存储的“跨页”问题可能会造成额外的性能开销这里不展开感兴趣的朋友可以自行查阅相关资料进行研究。 拆分字段的操作建议在数据库设计阶段就做好。如果是在发展过程中拆分则需要改写以前的查询语句会额外带来一定的成本和风险建议谨慎。   垂直分库 垂直分库在“微服务”盛行的今天已经非常普及了。基本的思路就是按照业务模块来划分出不同的数据库而不是像早期一样将所有的数据表都放到同一个数据库中。如下图 小结 系统层面的“服务化”拆分操作能够解决业务系统层面的耦合和性能瓶颈有利于系统的扩展维护。而数据库层面的拆分道理也是相通的。与服务的“治理”和“降级”机制类似我们也能对不同业务类型的数据进行“分级”管理、维护、监控、扩展等。 众所周知数据库往往最容易成为应用系统的瓶颈而数据库本身属于“有状态”的相对于Web和应用服务器来讲是比较难实现“横向扩展”的。数据库的连接资源比较宝贵且单机处理能力也有限在高并发场景下垂直分库一定程度上能够突破IO、连接数及单机硬件资源的瓶颈是大型分布式系统中优化数据库架构的重要手段。 然后很多人并没有从根本上搞清楚为什么要拆分也没有掌握拆分的原则和技巧只是一味的模仿大厂的做法。导致拆分后遇到很多问题例如跨库join分布式事务等。   水平分表 水平分表也称为横向分表比较容易理解就是将表中不同的数据行按照一定规律分布到不同的数据库表中这些表保存在同一个数据库中这样来降低单表数据量优化查询性能。最常见的方式就是通过主键或者时间等字段进行Hash和取模后拆分。如下图所示 小结 水平分表能够降低单表的数据量一定程度上可以缓解查询性能瓶颈。但本质上这些表还保存在同一个库中所以库级别还是会有IO瓶颈。所以一般不建议采用这种做法。   水平分库分表 水平分库分表与上面讲到的水平分表的思想相同唯一不同的就是将这些拆分出来的表保存在不同的数据中。这也是很多大型互联网公司所选择的做法。如下图 某种意义上来讲有些系统中使用的“冷热数据分离”将一些使用较少的历史数据迁移到其他的数据库中。而在业务功能上通常默认只提供热点数据的查询也是类似的实践。 在高并发和海量数据的场景下分库分表能够有效缓解单机和单库的性能瓶颈和压力突破IO、连接数、硬件资源的瓶颈。当然投入的硬件成本也会更高。同时这也会带来一些复杂的技术问题和挑战例如跨分片的复杂查询跨分片事务等   分库分表的难点 1、垂直分库带来的问题和解决思路 跨库join的问题 在拆分之前系统中很多列表和详情页所需的数据是可以通过sql join来完成的。而拆分后数据库可能是分布式在不同实例和不同的主机上join将变得非常麻烦。而且基于架构规范性能安全性等方面考虑一般是禁止跨库join的。那该怎么办呢 首先要考虑下垂直分库的设计问题如果可以调整那就优先调整。如果无法调整的情况下面笔者将结合以往的实际经验总结几种常见的解决思路并分析其适用场景。   跨库Join的几种解决思路 全局表所谓全局表就是有可能系统中所有模块都可能会依赖到的一些表。比较类似我们理解的“数据字典”。为了避免跨库join查询我们可以将这类表在其他每个数据库中均保存一份。同时这类数据通常也很少发生修改甚至几乎不会所以也不用太担心“一致性”问题。 字段冗余这是一种典型的反范式设计在互联网行业中比较常见通常是为了性能来避免join查询。 举个电商业务中很简单的场景 “订单表”中保存“卖家Id”的同时将卖家的“Name”字段也冗余这样查询订单详情的时候就不需要再去查询“卖家用户表”。 字段冗余能带来便利是一种“空间换时间”的体现。但其适用场景也比较有限比较适合依赖字段较少的情况。最复杂的还是数据一致性问题这点很难保证可以借助数据库中的触发器或者在业务代码层面去保证。 当然也需要结合实际业务场景来看一致性的要求。就像上面例子如果卖家修改了Name之后是否需要在订单信息中同步更新呢 数据同步定时A库中的tab_a表和B库中tbl_b有关联可以定时将指定的表做同步。当然同步本来会对数据库带来一定的影响需要性能影响和数据时效性中取得一个平衡。这样来避免复杂的跨库查询。笔者曾经在项目中是通过ETL工具来实施的。 系统层组装在系统层面通过调用不同模块的组件或者服务获取到数据并进行字段拼装。说起来很容易但实践起来可真没有这么简单尤其是数据库设计上存在问题但又无法轻易调整的时候。 具体情况通常会比较复杂。下面笔者结合以往实际经验并通过伪代码方式来描述。 简单的列表查询的情况 伪代码很容易理解先获取“我的提问列表”数据然后再根据列表中的UserId去循环调用依赖的用户服务获取到用户的RealName拼装结果并返回。 有经验的读者一眼就能看出上诉伪代码存在效率问题。循环调用服务可能会有循环RPC循环查询数据库…不推荐使用。再看看改进后的 这种实现方式看起来要优雅一点其实就是把循环调用改成一次调用。当然用户服务的数据库查询中很可能是In查询效率方面比上一种方式更高。坊间流传In查询会全表扫描存在性能问题传闻不可全信。其实查询优化器都是基本成本估算的经过测试在In语句中条件字段有索引的时候条件较少的情况是会走索引的。这里不细展开说明感兴趣的朋友请自行测试。 小结 简单字段组装的情况下我们只需要先获取“主表”数据然后再根据关联关系调用其他模块的组件或服务来获取依赖的其他字段如例中依赖的用户信息最后将数据进行组装。 通常我们都会通过缓存来避免频繁RPC通信和数据库查询的开销。   列表查询带条件过滤的情况 在上述例子中都是简单的字段组装而不存在条件过滤。看拆分前的SQL 这种连接查询并且还带条件过滤的情况想在代码层面组装数据其实是非常复杂的尤其是左表和右表都带条件过滤的情况会更复杂不能像之前例子中那样简单的进行组装了。试想一下如果像上面那样简单的进行组装造成的结果就是返回的数据不完整不准确。 有如下几种解决思路 查出所有的问答数据然后调用用户服务进行拼装数据再根据过滤字段state字段进行过滤最后进行排序和分页并返回。 这种方式能够保证数据的准确性和完整性但是性能影响非常大不建议使用。 查询出state字段符合/不符合的UserId在查询问答数据的时候使用in/not in进行过滤排序分页等。过滤出有效的问答数据后再调用用户服务获取数据进行组装。 这种方式明显更优雅点。笔者之前在某个项目的特殊场景中就是采用过这种方式实现。   跨库事务分布式事务的问题 按业务拆分数据库之后不可避免的就是“分布式事务”的问题。以往在代码中通过spring注解简单配置就能实现事务的现在则需要花很大的成本去保证一致性。这里不展开介绍 感兴趣的读者可以自行参考《分布式事务一致性解决方案》链接地址 http://www.infoq.com/cn/articles/solution-of-distributed-system-transaction-consistency   垂直分库总结和实践建议 本篇中主要描述了几种常见的拆分方式并着重介绍了垂直分库带来的一些问题和解决思路。读者朋友可能还有些问题和疑惑。 1. 我们目前的数据库是否需要进行垂直分库 根据系统架构和公司实际情况来如果你们的系统还是个简单的单体应用并且没有什么访问量和数据量那就别着急折腾“垂直分库”了否则没有任何收益也很难有好结果。 切记“过度设计”和“过早优化”是很多架构师和技术人员常犯的毛病。   2. 垂直拆分有没有原则或者技巧 没有什么黄金法则和标准答案。一般是参考系统的业务模块拆分来进行数据库的拆分。比如“用户服务”对应的可能就是“用户数据库”。但是也不一定严格一一对应。 有些情况下数据库拆分的粒度可能会比系统拆分的粒度更粗。笔者也确实见过有些系统中的某些表原本应该放A库中的却放在了B库中。有些库和表原本是可以合并的却单独保存着。还有些表看起来放在A库中也OK放在B库中也合理。 如何设计和权衡这个就看实际情况和架构师/开发人员的水平了。   3. 上面举例的都太简单了我们的后台报表系统中join的表都有n个了分库后该怎么查 有很多朋友跟我提过类似的问题。其实互联网的业务系统中本来就应该尽量避免join的如果有多个join的要么是设计不合理要么是技术选型有误。请自行科普下OLAP和OLTP报表类的系统在传统BI时代都是通过OLAP数据仓库去实现的现在则更多是借助离线分析、流式计算等手段实现而不该向上面描述的那样直接在业务库中执行大量join和统计。转载于:https://www.cnblogs.com/kaleidoscope/p/9765210.html
http://icebutterfly214.com/news/64540/

相关文章:

  • 剑指offer-41、和为S的连续正数序列
  • 广西一对一辅导机构口碑之选:2025南宁、柳州、桂林备受好评的补习机构
  • PTA算法每日三题 - 详解
  • 1.5纳米气体过滤器有哪些推荐?这些品牌值得关注
  • 2025年评价高的食品标签厂家最新推荐排行榜
  • 2025年知名的雪花粉生产线TOP实力厂家推荐榜
  • 2025年比较好的水泵拉伸件厂家推荐及选购参考榜
  • 机器学习领导者分享AI普及与多样性实践
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名Android通讯应用框架功能探索
  • 2025上海全屋定制哪家口碑好?上海全屋定制厂家榜单
  • 2025上海全屋定制家具工厂榜单
  • 哈希集合
  • 102302142罗伟钊第三次作业
  • 实用指南:程序人生,人生如戏
  • [数据存储/数据库/分布式系统] 一致性哈希算法
  • 文本文件与基于二进制文件的存储的学生管理系统
  • 251124省运会结束啦
  • 2025留学代写危机应对指南:5家靠谱机构助你重返校园
  • 2025年11月美国实习中介排名全攻略:从简历到入职的实力派之选,解锁名企资源的职场引路人
  • 不那么详细的多项式笔记
  • Ai元人文:行为化不是放弃概念,而是通往概念的坚实阶梯
  • 2025美国留学机构TOP榜:从申请到就业的全链条护航者
  • 复制 deepseek think 思考 内容 的方法
  • Scrum冲刺阶段 Day One
  • 2025年11月口碑好的钢骨架聚乙烯塑料复合管厂家推荐排行榜哪家好
  • 2025-11-23~24 hetao1733837的刷题记录
  • 2025/11/24~2025/11/28 做题笔记 - sb
  • 高性能AI股票预测分析报告 - 2025年11月24日 - 20:46:52
  • 开题报告模板详解:手把手教你写出完美开题报告
  • 「张张讲AI」AI资讯公众号:联动深圳人才集团,讲师输出资讯+授课,助力AI落地