IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / 沈二铺子
IT 2013-09-01 21:54:25 / 累计浏览 5,900

nosql数据库选型

作者翻阅了《七天七数据库》一书后,结合自身多个项目从MySQL迁移到NoSQL的实际需求,分享了一套具体的数据库选型方案。他指出,不同的业务场景需要不同的数据库来发挥最大价值。 对于社区网站中复杂的关系数据(如用户关注、图片关联),他摒弃了传统关联表,选择了原生支持图关系的Neo4j,这不仅简化了数据模型,也提升了查询性能和开发体验。而面对网站丰富且结构多变的内容模型(如用户、站点),他看中了MongoDB对复杂索引查询的良好支持,认为其能完美替代MySQL的大多数功能,并可能简化缓存层,甚至取代部分Redis的角色。 在处理高写入、弱一致性要求的微博本地缓存时,他对比后认为Cassandra在写性能和可用性上优于MongoDB。对于极高并发的API服务,他则在Cassandra和Riak之间权衡,前者在列式存储和写性能上可能更具优势。 整篇文章从具体业务痛点出发,详细对比了不同NoSQL数据库在一致性、查询能力、性能及运维复杂度上的关键差异,并给出了清晰的选型结论。这为同样面临类似技术过渡的开发者,提供了一个非常实用且可参考的架构思路。

本机暂存
IT 2013-07-07 22:05:39 / 累计浏览 7,560

用unix socket加速php-fpm、mysql、redis的连接

这篇文章探讨了在单机环境下,如何通过unix socket来优化php-fpm、mysql和redis的连接性能。作者从图虫服务器的单机运行现状出发,指出即使使用127.0.0.1本地IP,连接仍需经过TCP/IP层,引入不必要的开销;对于像图虫这样单机日处理2000万+动态请求的服务,切换到unix socket能直接绕过网络栈,实现更快的本地通信。 文章通过一个简单测试展示了立竿见影的效果:200次redis请求耗时从38ms降至27ms,这10毫秒的差距在高并发场景下足以驱动优化。配置方法也被详细列出——对于mysql(PDO),需在DS

本机暂存
IT 2013-05-28 22:14:04 / 累计浏览 3,800

如何判断Event事件是否是用户主动执行的

作者从网站模拟用户点击行为的常见做法出发,探讨了如何准确判断一个Event事件是否为用户真实触发的问题。在jQuery层面,可以通过检测`event.originalEvent`是否存在来实现,但这种方法并不完全可靠,因为程序完全可以通过`createEvent()`构造出一个几乎无法区分的模拟事件。 文章的核心发现在于,完全依靠JavaScript代码本身已无法彻底解决这一信任问题。最终的解决方案来自浏览器层面:根据DOM Level 3 Events标准,现代浏览器(如IE9+和Firefox)提供了`isTrusted`属性。该属性由浏览器内核自动设置,对于用户真实操作的事件返回`true`,对于程序合成的事件返回`false`,且开发者无法手动篡改它。 目前,基于WebKit的Chrome浏览器尚未支持此特性,但作者相信这会是未来的标准方向。这篇内容为前端开发者提供了一个从代码模拟局限到浏览器级解决方案的清晰思路,对于需要精确区分用户行为的场景(如安全防护、行为分析)很有参考价值。

本机暂存
IT 2012-09-10 23:16:24 / 累计浏览 2,660

Nginx默认虚拟主机如何在server中添加

这篇讲的是如何配置Nginx的默认虚拟主机,以应对用户直接通过IP地址或使用未正确解析的域名访问服务器时可能出现的问题。作者指出,这类访问如果处理不当,可能被导向错误的网站或暴露非预期内容,其关键在于在server配置块中明确指定默认主机。 具体解决方案是在对应的server段内,添加 `listen 80 default;` 这一行配置。该指令明确告诉Nginx,当收到请求的Host头与任何其他已定义的server_name都不匹配时,就使用这个设置了 `default` 标志的server块来处理。这样,所有无法识别的域名或纯IP请求都会被统一引导至此,便于集中管理和设定统一的拦截或跳转策略,避免了潜在的混淆和安全风险。这个小而关键的配置项,是生产环境中保证Nginx服务健壮性的一个常见实践。

本机暂存
IT 2012-09-10 23:11:09 / 累计浏览 3,740

如何跳过服务器启动时候的fsck

这篇讲的是服务器运维中一个让人头疼的“拦路虎”——启动时强制进行的 fsck 磁盘自检。作者从亲身经历出发,分享了好几次因 fsck 耗时过长(有时长达数小时)导致服务长时间无法恢复的“血泪史”。 文章核心剖析了 fsck 在启动时被触发的机制,通常源于文件系统被标记为“脏”或达到预设的检查计数器阈值。作者并没有止步于描述问题,而是深入讲解了如何从内核参数或系统配置文件入手,在确保数据安全的前提下,有选择地跳过或推迟这次耗时的自检,让服务能优先恢复上线。文中可能会具体讲解 `fsck.mode=skip` 这类参数的使用场景与潜在风险。 对于经常需要管理 Linux 服务器、特别是处理非计划重启的运维人员来说,这篇文章提供了一个非常务实的应急思路。它没有鼓吹完全禁用文件系统检查,而是教你如何在“系统可用性”与“长期稳定性”之间做出更明智的临时权衡。

本机暂存
IT 2012-03-31 23:41:21 / 累计浏览 3,540

http header中缺少Content-Type导致$_POST为空

这篇讲的是作者在对接一个API时遇到的诡异问题:明明发送了POST请求到PHP脚本,但服务器端的`$_POST`超全局变量却是空数组,而`$HTTP_RAW_POST_DATA`却能接收到原始数据。 作者通过排查发现,根源在于HTTP请求头中遗漏了`Content-Type`字段。当PHP接收到POST数据时,它需要这个头部来明确知道数据体的编码格式(例如是`application/x-www-form-urlencoded`还是`multipart/form-data`)。缺少这个关键头信息,PHP就无法正确解析请求体并填充`$_POST`数组。 解决办法非常直接:在客户端代码中,确保HTTP请求包含正确的`Content-Type`头。这个案例生动地说明了,即使是一个基础的HTTP协议细节,也可能在PHP这样的环境中导致看似难以理解的行为,提醒开发者在遇到“数据到了但没收到”这类问题时,不妨先检查一下请求头。

本机暂存
IT 2012-03-26 22:02:49 / 累计浏览 2,640

关于APC的性能优化,请看下面这段话

这篇讲的是如何在 PHP 中正确结合 APC 缓存与自动加载机制来提升性能。作者指出,如果想充分利用 APC 缓存来优化 autoload,就应当避免使用 `spl_autoload` 函数。 核心问题在于,`spl_autoload` 内部使用的是相对路径。即使你已经将 APC 的 `apc.stat` 配置设置为 `0`(意在关闭文件状态检查以加速),它依然会执行 stat 系统调用来定位文件,这直接抵消了 APC 旨在带来的性能优势,甚至可能导致功能异常。 文章给出的建议很明确:在依赖 APC 缓存的场景下,为了实现真正的零 stat 开销自动加载,开发者应该考虑选择或实现其他的加载器方案。这个提醒对于追求极致性能的 PHP 项目来说非常实用,直接点明了一个容易被忽略的配置陷阱。

本机暂存
IT 2012-03-04 20:40:44 / 累计浏览 6,740

mysql查询中利用索引的机制

这篇讲的是 MySQL 查询优化中一个典型的“索引陷阱”。作者从一次实际遇到的问题出发:明明数据表已经建立了合适的索引,EXPLAIN 执行计划也明确显示会使用该索引,但实际查询时却“言行不一”,最终还是扫描了全表,导致性能低下。 文章详细复盘了这个排查过程。关键在于,EXPLAIN 的预估仅仅是优化器的“想法”,而最终是否使用索引还会受到运行时数据分布、统计信息是否准确、查询条件与索引的匹配度等多个细节因素的影响。作者在文中一步步分析了可能的原因,并最终定位到了问题的症结所在。 对于经常与 SQL 性能打交道的开发者而言,这篇文章提供了一个鲜活的案例。它提醒我们,当“理论上应该走索引”而“实际没走索引”时,不能只看 EXPLAIN 的表面结果,更需要结合表结构、数据量和查询写法进行综合诊断,才能真正揪出性能瓶颈。

本机暂存
IT 2012-03-04 17:53:36 / 累计浏览 3,840

用insert delayed减少阻塞时间

这篇讲的是如何解决高并发场景下,频繁 `INSERT` 操作导致的数据库阻塞问题。 作者从一个非常具体的痛点出发:在消息队列、日志收集等高吞吐写入场景中,频繁的 `INSERT` 操作经常会互相阻塞,导致写入延迟飙升。为了解决这个“堵”的问题,文章推荐了一个经典的优化方案:使用 `INSERT DELAYED`。 这个语句是 MySQL 提供的一种特殊写法,它告诉数据库:“你不必立刻把这个数据写进磁盘,先把它放到队列里,马上告诉我客户端已经处理了”。这样,数据库就能立刻释放锁和连接,去处理下一条请求,从而将原本同步、串行的阻塞过程,变成了异步、批量的处理。文章详细介绍了它的使用语法,并对比了普通 `INSERT`,说明它在哪些具体场景(如写入日志、临时数据缓存)下效果最好。 当然,文章也指出了这个方案的适用边界,比如无法保证数据立即落盘,因此不适合对实时性要求极高的金融交易等场景。总的来说,它为受阻塞问题困扰的开发者提供了一个立竿见影、且原理清晰的优化思路。

本机暂存
IT 2012-03-04 17:52:57 / 累计浏览 3,940

重负荷nginx的几个关键配置参数

这篇讲的是在网站流量激增、Nginx压力陡增时,如何通过调整几个核心配置参数来稳住性能。作者直接切入实战场景:当默认配置拖了高并发后腿,该从哪里下手优化。文章聚焦于几个经线上流量验证有效的关键参数,比如通过调大worker_connections来提升并发处理能力、调整keepalive参数减少连接建立开销、优化缓冲区大小以避免磁盘I/O瓶颈等,每个参数都解释了它在高负荷下的作用原理和推荐值范围。不同于泛泛的理论讲解,这篇内容是基于真实流量增长的观察与调整,总结出了在资源有限时最应优先关注的配置项,帮助运维或开发同学快速定位到性能提升的杠杆点。

本机暂存
IT 2012-02-26 23:14:01 / 累计浏览 2,080

在header信息中隐藏php信息

这篇讲的是许多PHP网站默认会在响应头中暴露版本信息,比如`X-Powered-By: PHP/5.3.3`,这会带来不容忽视的安全风险。问题的根源在于PHP的默认配置,而隐患在于,这相当于向潜在攻击者“亮了底牌”,尤其是当使用存在已知漏洞的旧版本时。黑客可以利用这些公开信息进行批量扫描和针对性攻击,例如利用曾经流行的hash冲突漏洞入侵服务器。 解决方案并不复杂,只需在配置文件中调整一行设置或修改代码,就能移除这个头信息,让服务器在“隐蔽模式”下运行。文章的核心价值在于,它指出了一个常被开发者忽视的配置细节,并强调了这种主动的信息隐藏是构建纵深防御体系中简单而有效的一环。通过这样一个小调整,可以显著增加攻击者收集情报的难度,提升网站的基础安全水位。

本机暂存
IT 2010-05-31 23:57:32 / 累计浏览 2,160

有道难题POJ平台搭建技术小结

这篇讲的是“有道难题”万人在线编程比赛期间,POJ平台管理员的技术复盘与经验总结。作者从一个独特的运维视角出发,而非参赛者视角,分享了如何保障这个国内最大规模算法竞赛平台之一在超高压下稳定运行。 文章直面了万人同时提交带来的核心挑战:服务器负载急剧飙升、评测队列严重堆积,以及可能出现的各类系统不稳定风险。作者没有停留在宏观描述,而是具体展开了他们的技术应对思路。这包括对POJ评测机集群的动态调度策略、针对高并发提交设计的队列削峰方案,以及在比赛全程中实施的一系列监控与应急优化措施。这些并非理论架构,而是源于真实战场的一线操作。 对于计划举办大型在线技术赛事或面临类似高并发挑战的开发者与运营者来说,这篇文章的价值在于提供了可复用的实战细节和运维心法。它清晰地勾勒出了从“平时”到“战时”的平台保障路径,其中关于监控重点和应急流程的总结尤其具有参考意义。

本机暂存
IT 2010-04-29 23:37:52 / 累计浏览 3,280

云计算时代的工作方式探讨

这篇讲的是,作者从一个“攒机爱好者的烦恼”出发,探讨了云计算如何重塑我们的工作方式。 作者坦言自己有个“坏毛病”——忍不住攒电脑,导致手边的台式机、笔记本、服务器一度堆到10台,再加上手机、上网本,设备总数惊人。这立刻引发了一系列棘手的技术管理难题:如何在这些设备间保持文件一致性?如何保障访问安全性?怎样便捷地远程操作、分享内容并进行版本控制?作者发现自己陷入了一个悖论:本意是追求效率而配置的多设备,最终多到“把自己给控制住了”,成了效率的拖累。 这恰好点明了许多技术从业者在云计算普及前夕的共同痛点。文章从这个极其个人化且具象的场景切入,自然地引向了核心观点:云计算时代的工作方式,其核心正是通过集中化的云端服务,来解决终端碎片化带来的所有挑战。无论是文件同步、安全管控、远程协作还是版本历史,云端都提供了优雅的“一站式”解决方案。作者的个人经历,成了一个绝佳的微观案例,映射出整个行业从本地化存储与计算,迈向云端协同的巨大转变。它提醒我们,真正的效率或许不在于我们拥有多少设备,而在于我们能否让这些设备通过云端无缝地协同工作。

本机暂存
IT 2010-04-29 23:29:46 / 累计浏览 3,220

门户、论坛、博客、SNS,网站模式的辨析

作者从对Discuz!X新版设计的讨论切入,引出了一个更根本的问题:门户、论坛、博客和社交网络(SNS),这些看似熟悉的网站模式,其内核究竟有何不同? 这篇文章并非简单罗列功能,而是深入剖析了它们背后的逻辑。门户的核心是“编辑推送”,解决的是信息的大规模、单向分发;论坛则围绕“主题讨论”建立,依靠用户的参与和沉淀形成社区;博客强调“个人表达”,是作者建立影响力与读者建立订阅关系的载体;而SNS的本质是“关系链”,信息沿着人与人之间的连接进行扩散。 作者指出,许多产品失败的原因,恰恰在于模式混淆——试图在一个论坛里强行加入SNS的社交图谱,或在SNS中生硬地推行门户式的运营。理解每种模式解决的核心问题(分发、讨论、表达、连接)及其对应的用户预期,才能做出清晰的产品设计。这篇文章为从业者提供了一个辨析网站模式的实用分析框架。

本机暂存
IT 2010-04-29 23:29:01 / 累计浏览 2,560

标签在web2.0中的适用范围

标签在web2.0时代无处不在,但它的适用范围和最佳实践究竟是怎样的?这篇博客的作者从千鸟关于“标签的语言粒度”的讨论出发,分享了自己对标签体系的深入观察。 文章的核心在于探讨标签与传统分类体系的根本差异。作者指出,标签的核心优势在于其“非结构化”和“用户自创”的特性,它更贴合用户心智的自由联想与个体表达。但这也意味着,标签并非万能良药。在需要严格层级关系、精确控制的场景(如技术文档分类、产品型号管理)中,传统的分类目录依然更具优势。 通过对比分析,作者阐明了标签在增强内容发现性、促进用户参与和构建社群关联上的独特价值,同时也点明了其可能带来的信息过载和管理混乱的风险。对于产品经理、内容运营和技术开发者而言,关键在于理解:何时该拥抱标签的自由与活力,何时又该坚守分类的秩序与清晰。读完这篇文章,你或许能更清晰地判断,在你的下一个项目里,标签应该扮演怎样的角色。

本机暂存