推荐系统笔记——推荐引擎之实现基本的实时处理(二)

流式处理

优势:低响应时延、动态效果丰富、用户体验效果好、转化率高

劣势:资源消耗严重、效果准确度有影响、效果起伏大且分析原因难

如何打造自己的流式处理系统:

• 设计场景和梳理需求(如视频网站场景、在线阅读小说的场景)
• 制定流式处理规则(如点击流式处理规则、收藏流式处理规则)
• 人工干预推荐结果(编辑推荐)

应用流式处理:重定向、类别关联、同类目推荐、人工干预推荐结果

流式处理实现:内存更新方式、一致性哈希算法、更新缓存机制

内存更新方式

内存更新方式:map、list

一致性哈希算法

参考博客:https://blog.csdn.net/cywosp/article/details/23397179

构造环形Hash空间,把数据通过Hash算法映射到环上,按照顺时针方向将所有对象存储到离自己最近的机器中。

考虑节点的添加删除以及平衡性。

模拟实现流式处理

Server

# -*- coding: utf-8 -*-
import socket

HOST,PORT = "", 8888

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print("Serving HTTP on port %s ..."%PORT)

def Processing(request):
    uid = request.split("key=")[1].split(" ")[0]
    return uid

def gp(uid):
    click_action = {}  # key = uid, value = video_ids
    file = open("./logfile.txt", "r")
    for line in file.readlines():
        line = line.strip()
        ls = line.split("&")    # len(ls) = 8
        if ls[7] != "1":
            continue
        if ls[1] not in click_action.keys():
            click_action[ls[1]] = []
        click_action[ls[1]].append(ls[4])
    if uid in click_action.keys():
        return "&&".join(click_action[uid])
    
comment_log = {}

def log_process(request):
    print("xiao ming's log")
    print(request)
    ls = request.split("&")
    if ls[1] not in comment_log.keys():
        comment_log[ls[1]] = []
    comment_log[ls[1]].append(ls[4])
    for k,v in comment_log.items():
        print("now")
        print(k + "\t" + "&&".join(v))
    return "yes i got it"

while True:
    client_connection, client_address = listen_socket.accept()
    request = client_connection.recv(1024)
    #http_response = gp(request)
    #http_response = log_process(request)

    client_connection.sendall(b'hi')
    #client_connection.sendall(http_responsei)
    client_connection.close()

Client

# -*- coding: utf-8 -*-
import socket
import os

ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ss.connect(('192.168.0.1',8888)) #改成自己电脑的ip
ss.sendall(r"ebLfaG&five&Macintosh Chrome Safari&1.1.1.1&898923&苹果发布会&0&7")
#os.system('sleep 1')
ss.send(b'EOF')
data=ss.recv(1024)
print("server's response : %s "%data)
ss.close()

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值