博客回忆录
本博客创建于 2010
年末,到现在已经 8年
有余。域名 phpha.com
注册时间为 2010-12-30
,首次备案在 2012
年左右,后来于 2014
年初备案转移至阿里云,最后备案注销于 2019-03-26
。
本博客创建于 2010
年末,到现在已经 8年
有余。域名 phpha.com
注册时间为 2010-12-30
,首次备案在 2012
年左右,后来于 2014
年初备案转移至阿里云,最后备案注销于 2019-03-26
。
在分布式系统中,我们经常需要生成一个唯一的 ID
,或用于订单,或用于其他场景。总之基本的要求就是要唯一且高效。对这个 ID
还希望其中能带有一些时间信息,这样即使我们后端的系统对记录进行了分库分表,也能够以时间顺序对这些记录进行排序。Twitter
的 snowflake
算法是这种场景下的一个典型解法。
相对于 PHP
而言,Golang
里面的获取时间应该说是很不方便有木有。因此,特意封装了以下项目中常用到的获取时间相关的函数。
本文基于 Golang
的爬虫框架 Go-Colly
进行数据抓取,然后存储到 MongoDB
数据库。根据搜索结果,相对来说最成熟的 MongoDB
驱动,应该是 mgo
,但是目前 mgo
的作者已经停止维护。另外 MongoDB
官方也已经有对应 Golang
的驱动 mongo-go-driver
,但是 Google
上相关的资料并不多。
因项目需要,要对网络上某些信息进行抓取,以便加工后做数据分析。提到爬虫框架,知名度最高的当属基于Python
的爬虫框架 Scrapy
。但是由于本人对 Python
并不熟悉,并且暂时也不准备去深入学习,因此不在考虑范围。同时也是基于学习的目的,因此选择了 Golang
方向。基于 Golang
的成熟爬虫框架其实并不多,因此在选择上不用太纠结,就用 Go-Colly
了。
“协程”(Coroutine)概念最早由 Melvin Conway 于1958年提出。协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。总的来说,协程为协同任务提供了一种运行时抽象,这种抽象非常适合于协同多任务调度和数据流处理。在现代操作系统和编程语言中,因为用户态线程切换代价比内核态线程小,协程成为了一种轻量级的多任务模型。