golang 如何处理大数据


当前第2页 返回上一页

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

package main

  

import "log"

  

func main() {

    //恢复上次执行的checkpoint,如果是第一次执行就获取一个初始值。

    checkpoint := loadCheckpoint()

     

    //工序(1)在pipeline外执行,最后一个工序是保存checkpoint

    pipeline := NewPipeline(4, 8, 2, 1)

    for {

        //(1)

        //加载100条数据,并修改变量checkpoint

        //data是数组,每个元素是一条评论,之后的联表、NLP都直接修改data里的每条记录。

        data, err := extractReviewsFromA(&checkpoint, 100)

        if err != nil {

            log.Print(err)

            break

        }

         

        //这里有个Golang著名的坑。

        //“checkpoint”是循环体外的变量,它在内存中只有一个实例并在循环中不断被修改,所以不能在异步中使用它。

        //这里创建一个副本curCheckpoint,储存本次循环的checkpoint。

        curCheckpoint := checkpoint

         

        ok := pipeline.Async(func() error {

            //(2)

            return joinUserFromB(data)

        }, func() error {

            //(3)

            return nlp(data)

        }, func() error {

            //(4)

            return loadDataToC(data)

        }, func() error {

            //(5)保存checkpoint

            log.Print("done:", curCheckpoint)

            return saveCheckpoint(curCheckpoint)

        })

        if !ok { break }

         

        if len(data) < 100 { break } //处理完毕

    }

    err := pipeline.Wait()

    if err != nil { log.Print(err) }

}

以上就是golang 如何处理大数据的详细内容,更多文章请关注木庄网络博客!!

返回前面的内容

相关阅读 >>

leetcode331 验证二叉树的前序序列化 golang

手撸golang 基本数据结构与算法 链表

golang 程序结构

dbatool-dodba

golang mysql操作介绍

go 语言规范 - 编码风格篇

解决go升级到1.14后无法debug

关于golang 全局sql数据库连接

go modules构建项目

手撸golang 行为型设计模式 状态模式

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...