IT技术博客大学习 共学习 共进步
首页 / 也就这样
IT 2017-10-15 09:41:14 / 累计浏览 2,300

sqlite3导入到mysql

这篇讲的是如何将一个膨胀到15GB的SQLite3数据库(具体来自磁力链接抓取工具magnetico)成功迁移到MySQL。作者从实际问题出发:SQLite3文件过大且不支持分布式,因此需要“魔改”为MySQL,但迁移过程卡在了导入环节。 文章清晰地拆解了整个流程:先用`.dump`导出SQL,但面对大文件,导入常常中途失败。作者的核心技巧在于利用`awk`按行号切分文件,从失败点重新开始。同时,必须调整MySQL的`max_allowed_packet`参数,并使用`sed`对导出的SQL进行“方言翻译”——比如将双引号包裹的表名改为反引号,并处理十六进制数据,以解决SQLite与MySQL的语法兼容问题。 最终,通过这些针对性的步骤和一条关键的`-f`强制导入参数,完成了大规模数据的跨库迁移。对于面临类似场景的开发者,这提供了一套可复现的实战解决方案。

IT 2017-03-11 23:48:21 / 累计浏览 1,800

缓存那些事

这篇讲的是缓存体系中的“十八般武艺”。作者从最前端的浏览器缓存头(If-Modified-Since)谈起,带我们看到了CDN层面的不同玩法:CSI、SSI和ESI。文章特别指出了ESI在App接口场景下的适用性,以及在高并发要求下,直接生成静态文件上传CDN的硬核方案。 视线转向应用层,文章拆解了local cache、Redis、Tair构成的多级缓存策略。以当当网交易链路为例,设置了1分钟的本地缓存过期时间,在一致性与性能间取得了平衡。对于开发者常头疼的缓存击穿问题,文章清晰地列举了三种场景:缓存过期、数据不存在和缓存宕机,并分别给出了“加锁防雪崩”、“空对象防穿透”和“DB裸压保底”的实战心法。 此外,文章还延伸到了提升用户体验的pjax局部更新与bigpipe分段输出技术。最后,作者将笔触落到缓存优化的细微处——通过精简Key、使用slim object序列化以及Gzip/Brotli压缩,从一点点缩减对象大小入手,来节省整个缓存池子的资源。这是一份从浏览器到服务器、从架构到细节的缓存实践地图。

IT 2017-01-16 00:13:57 / 累计浏览 3,040

订单号的生成规则

订单号生成是电商、O2O等系统的经典难题:既要保证全局唯一,又不能暴露每日流水等商业机密,同时还得满足语义性、快速路由分库分表以及控制长度等实际需求。这篇文章从这一核心矛盾出发,拆解了业内几种主流的生成策略。 文章具体分析了大众点评、美团团购和淘宝的实践。例如大众点评采用“时间戳+用户标识码+随机数”来兼顾唯一与信息隐藏;美团团购和淘宝则巧妙地结合了“单表自增ID/发号器ID”与“买家ID的后几位”,这种设计不仅保证了唯一性,更关键的是能通过订单号直接计算出数据路由,快速定位到对应的库与表。 除此之外,文章还介绍了分布式ID发号器的整体架构(如美团的Leaf),解释了如何通过独立服务来生成全局有序或趋势递增的ID号段,以支撑高并发和分库分表的场景。对于正在设计订单系统或对分布式ID生成感兴趣的开发者来说,这些来自大厂的实战总结提供了清晰的思路和可靠的参考方案。

IT 2016-03-16 23:42:05 / 累计浏览 2,340

记一次内存泄露的debug过程

这篇讲的是作者在压测“代码在线运行”工具时,遭遇了高并发下内存飙升且无法回落的问题。从自身代码审查无果,他转向使用Go语言内置的pprof工具进行深度剖析。 通过分析堆内存分配的热点,问题指向了goroutine与ioPipe的交互。作者进一步验证,发现大量goroutine因ioPipe未被正确关闭而持续存在,无法回收,从而造成了内存的持续累积。根源在于异常退出前未主动关闭资源。 定位后,解决方案变得清晰:在程序逻辑中确保主动关闭ioPipe的Reader。修复后,作者使用wrk工具进行了长时间压测,并监控goroutine数量,确认内存占用稳定,问题得以解决。文章结尾点出,这个因粗心引起的小bug,修复却需借助专业工具链,提醒开发者熟悉语言提供的诊断工具至关重要。