精华内容
下载资源
问答
  • import java.text.decimalformat;/*** //todo uv数据与风速风向数据转换*/public class uvandsd {/*** uv数据计算速度*/public static double vectortospeed(double ums, double vms) {double windabs = math.sqr...

    package com.qr.util;

    import java.text.decimalformat;

    /**

    * //todo uv数据与风速风向数据转换

    */

    public class uvandsd {

    /**

    * uv数据计算速度

    */

    public static double vectortospeed(double ums, double vms) {

    double windabs = math.sqrt(math.pow(ums, 2) + math.pow(vms, 2));

    return windabs;

    }

    /**

    * uv数据计算风向

    */

    public static double vectortodegrees(double ums, double vms) {

    decimalformat df = new decimalformat("#.000");

    double windabs = math.sqrt(math.pow(ums, 2) + math.pow(vms, 2));

    double winddirtrigto = math.atan2(ums / windabs, vms / windabs);

    double winddirtrigtodegrees = winddirtrigto * 180 / math.pi;

    double winddirtrigfromdegrees = winddirtrigtodegrees + 180;

    return double.parsedouble(df.format(winddirtrigfromdegrees));

    }

    }

    展开全文
  • }/*** 同步Redis中UV数据到MongoDB定时任务*/@Scheduled(fixedRate= 10 * 60 * 1000)public voidredisUvToMongodbTask() { String day= DateUtils.formatToString(new Date(), "yyyy-MM-dd"); String key= SHOP_APP...

    packagenet.baiqu.shop.data.core.job;importlombok.extern.slf4j.Slf4j;importnet.baiqu.shop.data.core.util.DateUtils;importnet.baiqu.shop.data.core.util.RedisUtil;importnet.baiqu.shop.data.dal.entity.document.MPv;importnet.baiqu.shop.data.dal.entity.document.MShopPvStatistic;importnet.baiqu.shop.data.dal.entity.document.MShopUvStatistic;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.mongodb.core.MongoTemplate;importorg.springframework.data.mongodb.core.query.Criteria;importorg.springframework.data.mongodb.core.query.Query;importorg.springframework.data.mongodb.core.query.Update;importorg.springframework.scheduling.annotation.EnableScheduling;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;importorg.springframework.util.CollectionUtils;importredis.clients.jedis.Jedis;importredis.clients.jedis.Tuple;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;importjava.util.Set;/*** 同步redis和mongodb中pv uv统计数据的定时任务*/@Component

    @EnableScheduling

    @Slf4jpublic classPvUvJob {/**权益商城appId*/

    private static final String SHOP_APP_ID = "500000";/**redis片区*/

    private static final int REDIS_INDEX = 0;/**权益商城PV统计collection*/

    private static final String SHOP_PV_COLLECTION = "shop_pv_statistic";/**权益商城UV统计collection*/

    private static final String SHOP_UV_COLLECTION = "shop_uv_statistic";

    @AutowiredprivateMongoTemplate mongoTemplate;

    @AutowiredprivateRedisUtil redisUtil;/*** 同步Redis中PV数据到MongoDB定时任务*/@Scheduled(fixedRate= 10 * 60 * 1000)public voidredisPvToMongodbTask() {

    String day= DateUtils.formatToString(new Date(), "yyyy-MM-dd");

    String key= SHOP_APP_ID + "_pv_" +day;

    log.info("PvUvJob.redisPvToMongodbTask: 开始同步{}数据", key);//查询mongodb中是否有当天的pv统计数据,有则更新,无则插入

    MShopPvStatistic shopPvStatistic =mongoTemplate.findOne(

    Query.query(

    Criteria.where("day").is(day)

    ), MShopPvStatistic.class);

    List pvList = new ArrayList<>();//查询redis中的pv数据

    long total = this.queryPvByRedis(key, pvList);if (shopPvStatistic == null) {//插入//封装pv统计数据

    shopPvStatistic = newMShopPvStatistic();

    shopPvStatistic.setAppId(SHOP_APP_ID);

    shopPvStatistic.setDay(day);

    shopPvStatistic.setPvList(pvList);

    shopPvStatistic.setTotal(total);

    shopPvStatistic.setCreateTime(newDate());

    shopPvStatistic.setUpdateTime(newDate());//将pv统计数据存入mongo中

    mongoTemplate.insert(shopPvStatistic, SHOP_PV_COLLECTION);

    log.info("PvUvJob.redisPvToMongodbTask: 插入{}数据到mongo", key);

    }else{//更新

    mongoTemplate.updateFirst(

    Query.query(new Criteria("day").is(day)

    ),

    Update.update("total", total)

    .set("pvList", pvList)

    .set("updateTime", newDate()),

    MShopPvStatistic.class);

    log.info("PvUvJob.redisPvToMongodbTask: 更新{}数据到mongo", key);

    }

    log.info("PvUvJob.redisPvToMongodbTask: 完成同步{}数据", key);

    }/*** 同步Redis中UV数据到MongoDB定时任务*/@Scheduled(fixedRate= 10 * 60 * 1000)public voidredisUvToMongodbTask() {

    String day= DateUtils.formatToString(new Date(), "yyyy-MM-dd");

    String key= SHOP_APP_ID + "_uv_" +day;

    log.info("PvUvJob.redisUvToMongodbTask: 开始同步{}数据", key);//查询mongodb中是否有当天的uv统计数据,有则更新,无则插入

    MShopUvStatistic shopUvStatistic =mongoTemplate.findOne(

    Query.query(

    Criteria.where("day").is(day)

    ), MShopUvStatistic.class);//查询redis中的uv数据

    long total = this.queryUvByRedis(key);if (shopUvStatistic == null) {//插入//封装uv统计数据

    shopUvStatistic = newMShopUvStatistic();

    shopUvStatistic.setAppId(SHOP_APP_ID);

    shopUvStatistic.setDay(day);

    shopUvStatistic.setTotal(total);

    shopUvStatistic.setCreateTime(newDate());

    shopUvStatistic.setUpdateTime(newDate());//将pv统计数据存入mongo中

    mongoTemplate.insert(shopUvStatistic, SHOP_UV_COLLECTION);

    log.info("PvUvJob.redisUvToMongodbTask: 插入{}数据到mongo", key);

    }else{//更新

    mongoTemplate.updateFirst(

    Query.query(new Criteria("day").is(day)

    ),

    Update.update("total", total)

    .set("updateTime", newDate()),

    MShopUvStatistic.class);

    log.info("PvUvJob.redisUvToMongodbTask: 更新{}数据到mongo", key);

    }

    log.info("PvUvJob.redisUvToMongodbTask: 完成同步{}数据", key);

    }/*** 查询Redis中PV数据*/

    private long queryPvByRedis(String key, ListpvList) {

    Jedis jedis=redisUtil.getJedis();long total = 0;

    jedis.select(REDIS_INDEX);

    Set tuples = jedis.zrevrangeWithScores(key, 0, Long.MAX_VALUE);if (!CollectionUtils.isEmpty(tuples)) {for(Tuple tuple : tuples) {

    MPv pv= newMPv();

    pv.setRequestURL(tuple.getElement());

    pv.setCount((long) tuple.getScore());

    total= total + (long) tuple.getScore();

    pvList.add(pv);

    }

    }returntotal;

    }/*** 查询Redis中UV数据*/

    private longqueryUvByRedis(String key) {

    Jedis jedis=redisUtil.getJedis();

    jedis.select(REDIS_INDEX);

    Set tuples = jedis.zrevrangeWithScores(key, 0, Long.MAX_VALUE);returntuples.size();

    }

    }

    展开全文
  • HyperLogLog 是一种概率数据结构,用来估算数据的基数。数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID。Redis 的 HyperLogLog 通过牺牲准确率来减少内存空间的消耗,只需要12K内存,在标准误差0.81%的...

    Redis  自2.8.9起可用

    时间复杂度: O(1)添加每个元素。

    HyperLogLog 是一种概率数据结构,用来估算数据的基数。数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID。

    Redis 的 HyperLogLog 通过牺牲准确率来减少内存空间的消耗,只需要12K内存,在标准误差0.81%的前提下,能够统计2^64个数据。所以 HyperLogLog 是否适合在比如统计日活月活此类的对精度要不不高的场景。

    如果你正在开发一个基于“事件”的应用程序,该应用程序可以处理来自不同用户的许多请求,那么你很大可能希望能够计算滑动窗口或指定时间范围内不同的用户操作。

    计数不同用户行为的最快方法之一是写一个类似 SELECT COUNT(DISTINCT user) 的 SQL。但是,如果实时数据的量达到了上百万条,这可能会很昂贵。你可能会想到另一种方法,就是将用户保存在一个 Redis set 集合中,因为 set 天然具备去重的功能。

    但是,这种解决方案也带来了它固有的问题。如果一个统计不同用户记录的应用程序运行有多个实例,那么我们需要具有巨大 RAM 大小的内存缓存解决方案。如果要处理 1000 万个不同的记录,每个记录分配 10 字节,那么仅在一个时间范围内我们就至少需要 100MB 的内存。因此,这不是内存有效的解决方案。

    在本文中,我想向你展示如何通过在 Redis Cache 服务器中分配少于 2MB 的内存来处理一百万个不同的用户记录。

    我们都知道,Redis 有好几种数据结构,比如:String、BitMap、Set、Sorted Set 等。在这里我想特别强调一下Hyperloglog,因为它最适合通过减少内存消耗来统计不同的用户操作。

    Hyper LogLog

    Hyper LogLog 计数器的名称是具有自描述性的。 你可以仅仅使用loglog(Nmax)+ O(1)位来估计基数为 Nmax 的集合的基数。

    Redis Hyperloglog 操作

    要进行 Redis Hyperloglog 的操作,我们可以使用以下三个命令:

    PFADD

    PFCOUNT

    PFMERGE

    我们用一个实际的例子来解释这些命令。比如,有这么个场景,用户登录到系统,我们需要在一小时内统计不同的用户。 因此,我们需要一个 key,例如 USER:LOGIN:2019092818。 换句话说,我们要统计在 2019 年 09 月 28 日下午 18 点至 19 点之间发生用户登录操作的非重复用户数。对于将来的时间,我们也需要使用对应的 key 进行表示,比如 2019111100、2019111101、2019111102 等。

    我们假设,用户 A、B、C、D、E 和 F 在下午 18 点至 19 点之间登录了系统。

    127.0.0.1:6379> pfadd USER:LOGIN:2019092818 A

    (integer) 1

    127.0.0.1:6379> pfadd USER:LOGIN:2019092818 B C D E F

    (integer) 1

    当进行计数时,你会得到预期的 6。127.0.0.1:6379> pfcount USER:LOGIN:2019092818

    (integer) 6

    如果 A 和 B 在这个时间内多次登录系统,你也将得到相同的结果,因为我们仅保留不同的用户。

    127.0.0.1:6379> pfadd USER:LOGIN:2019092818 A B

    (integer) 0

    127.0.0.1:6379> pfcount USER:LOGIN:2019092818

    (integer) 6

    如果用户 A~F 和另外一个其他用户 G 在下午 19 点至下午 20 点之间登录系统:

    127.0.0.1:6379> pfadd USER:LOGIN:2019092819 A B C D E F G

    (integer) 1

    127.0.0.1:6379> pfcount USER:LOGIN:2019092819

    (integer) 7

    现在,我们有两个键 USER:LOGIN:2019092818 和 USER:LOGIN:2019092819,如果我们想知道在 18 点到 20 点(2 小时)之间有多少不同的用户登录到系统中,我们可以直接使用pfcount命令对两个键进行合并计数:

    127.0.0.1:6379> pfcount USER:LOGIN:2019092818 USER:LOGIN:2019092819

    (integer) 7

    如果我们需要保留键值而避免一遍又一遍地计数,那么我们可以将键合并为一个键 USER:LOGIN:2019092818-19,然后直接对该键进行pfcount操作,如下所示。

    127.0.0.1:6379> pfmerge USER:LOGIN:2019092818-19 USER:LOGIN:2019092818 USER:LOGIN:2019092819

    OK

    127.0.0.1:6379> pfcount USER:LOGIN:2019092818-19

    (integer) 7

    对于 100 万用户,Set 可以精确存储,而 Hyperloglog 则稍有偏差,多出了 7336,误差率大概是在 0.7%。而在内存占用上,Set 消耗了 10888895B≈10MB,Hyperloglog 只消耗了 10481B≈10KB 的内存,几乎是 Set 的 1/1000。

    127.0.0.1:6379> scard SET:USER:LOGIN:2019082811

    (integer) 1000000

    127.0.0.1:6379> pfcount PF:USER:LOGIN:2019082811

    (integer) 1007336

    127.0.0.1:6379> debug object SET:USER:LOGIN:2019082811

    Value at:00007FD74F841940 refcount:1 encoding:hashtable serializedlength:10888895 lru:9308508 lru_seconds_idle:53

    127.0.0.1:6379> debug object PF:USER:LOGIN:2019082811

    Value at:00007FD74F7A5940 refcount:1 encoding:raw serializedlength:10481 lru:9308523 lru_seconds_idle:50

    serializedlength 参数表示该 key 存储的内容所占用的内存字节数。

    滑动窗口的不同计数

    要在滑动窗口中计算不同的用户,我们需要指定一个较小的粒度,在这种情况下,分钟级的就足够了,我们将用户行为保存在格式为 yyyyMMddHHmm 的键中,例如 USER:LOGIN:201909281820。

    当我们要统计最后 5 分钟的不同用户操作时,只需要将 5 个键进行合并计算即可:

    127.0.0.1:6379> pfcount 201909281821 201909281822 201909281823 201909281824 201909281825

    (integer) 6

    版权声明:本文由PHP面试资料网发布,如需转载请注明出处。

    展开全文
  • 在我们的实际开发中,有时候会用到一些功能,比如签到和一些数据统计,那么这些功能,我们不可能去建立一些表去专业为签到和数据统计去服务,因为签到和数据统计这些都会导致这个表的数据越来越多,导致服务器整体...

    在我们的实际开发中,有时候会用到一些功能,比如签到和一些数据统计,那么这些功能,我们不可能去建立一些表去专业为签到和数据统计去服务,因为签到和数据统计这些都会导致这个表的数据越来越多,导致服务器整体性能下降,那么我们就可以用redis的一些功能来处理:

    1. 签到功能:

      1. 我们签到可以使用redis中的位图bitmap功能来实现,具体的bitmap功能介绍可以看这里:bitmap功能介绍
    2. 数据统计:

      1. 如果我们有一个功能是统计每天这个功能模块有多少用户访问,我们就可以使用HyperLogLog来统计:HyperLogLog功能介绍
    3. 在django中的实现:

    class TestAPIView(GenericAPIView):
        """签到和uv统计实验"""
    
        permission_classes = [IsAuthenticated]
    
        def get(self, request):
    
            # 毫秒的单位是f
            str_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f')
    
            # 位图
            redis_connect = django_redis.get_redis_connection(alias='bitmap')
            # 表示这个用户2020年09月签到,0表示未签到,1表示签到
            redis_connect.setbit('user_id_2020_09', 1, 1)
    
            # 页面数据统计(默认去重)
            redis_connect.pfadd('hyperlog_2020_09_01', *['user1', 'user2', 'user2', 'user2', 'user3'])
    
            return APIResponse.success(data=[], message="签到成功")
    
    展开全文
  • 01 — 什么是PV/UV网站流量分析,是指在获得网站访问量基本数据的情况下对有关数据进行统计、分析,从中发现用户访问网站的规律,并将这些规律与网络营销策略等相结合,从而发现目前网络营销活动中可能存在的问题,...
  • 数据埋点是数据分析的基础,依据埋点数据中我们可以开展数据清洗、数据归因、分析模型、AB测试等工作。如今数据分析可以说是当前最热门的技能了,不管是产品、运营还是设计都可以明显感知到各大平台、...
  • ClickHouse 之所以适合处理UV存储记录,根据博主理解主要因为满足如下几点: 面向列存储,适合这种类型的数据存储 借鉴了Google 论文HDFS 分布式文件存储技术 借鉴了Google 论文MapReduce 分布式计算查询技术 借鉴了...
  • UV(纹理)

    2021-06-10 14:23:25
    方法是:将Time节点连到输入参数的Tile中,输出数据连接到Texture Sampler节点的UV输入参数中。 Polar Coordinates(极坐标) 将输入的UV坐标转换成极坐标。在数学中,极坐标系是一种二维坐标系,其中平面上的每个点...
  • 网站运营数据 我们知道对于一个网站而言运营数据很重要,他直接关系到你可以拉到多少投资,以及网站以后的优化方向。 常见的运营指标有UV(Qnique Visitor,独立访客),PV(Page View,页面浏览量), DAU(Daily Active...
  • 实时统计pv、uv是再常见不过的大数据统计需求了,前面出过一篇SparkStreaming实时统计pv,uv的案例,这里用Flink实时计算pv,uv。我们需要统计不同数据类型每天的pv,...
  • threejs根据顶点计算UV,normal,实现贴图
  • 实时计算pv/uv Demo演示

    千次阅读 2021-02-09 11:08:17
    简介:本文由阿里巴巴高级技术专家邓小勇(静行)分享,主要用 Demo 演示如何通过实时计算 Flink 实时计算pv/uv的场景。作者 | 邓小勇(静行),阿里巴巴高级技术专家本文由阿里巴巴高级技术专家邓小勇(静行)分享...
  • 数据 现有user_age表如下: user_app表如下: 需求 求:0-10岁的用户、11-20岁的用户、21-30岁的用户、30岁以上的用户使用app的人数(uv)和次数(pv)。 分析 需求乍一看不难,但是如何实现同时求出uv和pv?有...
  • Flink实时统计pv、uv

    2021-12-04 20:58:38
    flink实时计算pv、uv
  • QPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上对程序员来说都是必懂知识点。下面我来一一解释一下。QPSQueries Per Second,每秒查询数。每秒能够响应的查询次数。QPS是对一个特定的查询...
  • 1.此算法是近似估算值,该算法能在一定误差内近似统计去重数,可以输出空间内去重数大小,若要求UV详细数据则该方法不适用。 2.需要在空间与准确性中取舍。若要求准确性较高,则HLL生成的空间就会较大。 基本流
  • 超大数据UV类PV类问题解决方案 背景 技术使用:基于大数据平台的 spark-sql,有基础能力去处理百亿级数据表 问题背景:随着大数据平台和数仓的建设,以及业务极大增加和日常积累,会让单表达到百亿级别 这时候就会...
  • PV ... UV UniqueVisitor 独立访客,根据IP地址来区分访客数,在一段时间内重复访问,也算一个UV。...数据价值决数据全生命周期的长度,并且数据价值会随着时间的变化而递减。同时,数据的采集粒度与时..
  • redis实时统计设计思路:1、 前端smarty插件(smarty_function_murl),将网站所有的连接生成一个urlid,后端根据获取的参数将需要的数据存入redis。2、后端插件(smarty_function_aurl),将urlid传入redis获取数据。3...
  • 独立访客(UV)数据页面浏览数(PV)的关系很多朋友对微信的uv和pv并不了解,不知道这专业的术语代表了什么意思,小编整理了一些资料,将在本文为大家介绍独立访客(UV)数据页面浏览数(PV)的关系~技术角度PV是指从浏览器...
  • Blender UV贴图

    2021-09-15 10:50:50
    uv贴图 1)进入uv editing。 2)选择贴图的物体,进入“编辑模式”。 3)按“a”键全选物体的顶点,按“U”键,选择“块面投影”在uv视图中。 4)在uv编辑中,点击“UV”,根据块面投影的形状导出“UV布局图”。...
  • 原标题:如何获取店铺UV、PV、转化率等数据1.1 问题生意参谋主要包含实时直播、经营分析、自动取数、专题工具等功能,想获取店铺相应的数据,就要了解如何使用以上工具。生意参谋首页通过实时指标、商品排行、行业...
  • 在实际应用中,我们往往还会关注,到底有多少不同的用户访问了网站,所以另外一个统计流量的重要指标是网站的独立访客数(Unique Visitor,UV) 1.假设我们已经采集到数据UserBehavior,并将数据放在工程目录input...
  • 可能只是使用到 uv 坐标对 texture 采样,所以顶点数据仅仅使用到: SV_Position (这个是每个 VertexShader 必定需要的数据,所以这个是剔除不了的) Texcoord 或是 Texcoord0 所以 Normal, Tagent, Color0~7, T
  • 数据可视化之风向图

    千次阅读 2020-12-29 00:33:41
    很多人都见过风向图,直观形象,也是地图数据和现实数据在可视化上很好的结合。这是我见的第一个风向图,记得是2012年吧,当时觉得很有意思,作为一名技术人员,自然好奇它是如何做到的,是Canvas还是SVG?但当时没...
  • Unity 之 ShaderGraph UV节点解析汇总

    千次阅读 2021-08-17 21:49:00
    还在为看不懂官方文档困扰吗? 我对ShaderGraph的UV下节点一一分析说明,总结的超级全面,进来看看吧~
  • Unity UGUI uv1 uv2 不起作用

    千次阅读 2021-11-04 09:42:58
    protected override void OnPopulateMesh(UnityEngine.UI....此方法的参数vh,可以通过以下方式获得顶点数据vh.PopulateUIVertex(ref vertex, i),并且修改顶点(UIVertex)数据的postion,normal,tagent,Co...
  • YUV信号有很多种,一般YUV420和...而这四种YUV422格式,每种又可以分为2小类,按Y和UV的排列可以有打包格式和平面格式。例如,一个640×480×2的YUV文件,打包格式就是YUYVYUYV这样一直排列下去,平面格式就是先640...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,741
精华内容 18,296
关键字:

uv数据