精华内容
下载资源
问答
  • 平台中HBase库数据量如何统计呢?1. 什么需求?2. 怎么做?2.1 弯路2.2 接坑3. HyperLogLog基数统计算法是什么?4. HLL验证5. 如何应用到需求中? 这是一两年前的任务单了,来得比较突然,就是需要知道一下目前平台...


    这是一两年前的任务单了,来得比较突然,就是需要知道一下目前平台中数据总量(存储量和条数),每日新增数据量,表中字段有值率。
    哇,接到这个任务,感觉存储量直接看集群统计总容量就好,条数怎么整?
    下面我就针对HBase库中的条数,每日新增条数,字段个数 来讲讲我们当年走过的弯路,填过的坑。

    1. 什么需求?

    统计每张HBase表的数据量,精确到字段级别,还有统计每日新增条数。
    分析一下HBase的表,每张表有存储周期TTL,表有不同的入库类型,如果是全量表还好,每次直接统计,但是又有增量标识的表,此表示堆积的过程,需要统计历史条数,再在累加新增,于此同时还需要将TTL过后的数据除去,好复杂啊~

    2. 怎么做?

    2.1 弯路

    看到这种需求,那肯定拿出Hadoop最有历史的MR来实现,然后我们一个兄弟吭哧吭哧设计了好久,还让其他兄弟帮他拿现场数据验证,发现现场表太多了,预估跑2-3天都不一定跑完历史数据,更别说新增,也别说去除TTL后的数据,者方案直接耗时1个月,写方案到验证,我能说简直无法使用,并且被一通批,那兄弟实在搞不定的情况下,转交到我手上了。

    2.2 接坑

    本博主刚看到上面坑爹的方案,感觉就不是什么好的,咱不说统计量合并,难道跑MR现场其他业务部跑了,让你这个统计任务占用的满满的?
    我无意间看到Redis在优化他们的统计是,提到了HyperLogLog基数统计算法,我就到网上搜了把实现原理,并下载相关的实现代码验证了一把,确实效率高,并且准确率也高居然可以99.99以上,并且准确率可以由自己设置的参数控制。就暂定这个方案啦~

    3. HyperLogLog基数统计算法是什么?

    HyperLogLog(下文简称为 HLL)是 Redis 2.8.9 版本添加的数据结构,它用于高性能的基数(去重)统计功能,它的缺点就是存在极低的误差率。
    。。待填充

    4. HLL验证

    下载下来HLL的java实现源码,写了个小demo验证了下
    java实现的HLL代码链接

    验证代码如下:

    5. 如何应用到需求中?

    展开全文
  • 20家酒店每日200张账单,如此以来一年就能积累出百万张订单数据,每张订单中包含的菜品单品自定义菜品组合菜品几个到几十个,想想数据量就很恐怖,在这些数据之上需要实现许多报表,如哪个员工销售了哪些类别菜品的...

    SQL或者NoSQL的方案

    问题:

    本人开发的点餐系统,20家酒店每日200张账单,如此以来一年就能积累出百万张订单数据,每张订单中包含的菜品单品自定义菜品组合菜品几个到几十个,想想数据量就很恐怖,在这些数据之上需要实现许多报表,如哪个员工销售了哪些类别菜品的数量,员工在不同餐段的绩效,账单优惠统计,不同的菜品有的打折有的不打折…

    解决:

    如果按照传统的开发思路,账单应该是一个关系表,账单号和菜品id都是外键,那么这张关系表的数据量将会达到千万级,随着时间的推移,用户变多,数据轻松达到几十亿级,这样的一张关系表,想想就挺头疼。于是想到一个比较折衷的方法,当时知道MySQL5.7版本可以支持JSON了,于是用一个很长的JSON字符串来存每一个账单,账单的菜品信息,支付信息,操作人信息等都内置进去,然后其他字段存一些整体性信息,索引性信息。

    效果:

    优势:账单信息更新方便,更新只需要按照索引取出修改再更新即可,一次操作只涉及一个表的一行数据,关系少容易分片存储。
    缺点:key-value的JSON因为每一行数据都要从新存储key,所以存在较大的空间浪费。更新容易读取困难,想要写个erp的报表,费那个劲,逐行读出来反序列化JSON字符串,遍历json(也许可以直接用MySQL实现,我不会,应该也不容易吧)

    下面是转别人总结的经验,基本和我的实践情况一样


    1、使用反三范式模型,设置冗余字段,减少多表联查。
    2、数据量增多,单靠主键查询效率低效,增加查询字段索引,提升查询效率。
    3、单节点压力过大,采用读写分离,将查询压力增加到其他节点,查询节点设置索引,插入节点不设置索引。但会导致数据存在时差,如果有多个读节点,将会导致短时间内数据不一致。
    4、使用redis、memcached等缓存中间件,将常用的查询数据缓存。但是会存在数据一致性问题,需要通过代码来保证数据强一致
    5、数据到达百万级以上,采用数据库分表分区,将同一个表中的数据分散到不同的分表分区中。运维难度加大,并且如果分区hash不合理,会产生数据倾斜,重分区数据迁移会导致产生大量io,重分区过程中,服务提供的性能大大降低。


    版权声明:本文为CSDN博主「开着小马奔腾哟」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lpp_dd/article/details/87969392

    展开全文
  • 点击上方IT牧场,选择置顶或者星标技术干货每日送达今天来聊一聊拼多多的一道后台面试真题,是一道简单的架构类的题目:拼多多有数亿的用户,那么对于某个网页,怎么使用Redis来统计一个网站的用户访问数呢?...

    点击上方 IT牧场 ,选择 置顶或者星标

    技术干货每日送达

    4ffedc2ad80fad49606fa2237004626f.png今天来聊一聊拼多多的一道后台面试真题,是一道简单的架构类的题目:拼多多有数亿的用户,那么对于某个网页,怎么使用Redis来统计一个网站的用户访问数呢?

    使用Hash

    哈希是Redis的一种基础数据结构,Redis底层维护的是一个开散列,会把不同的key映射到哈希表上,如果是遇到关键字冲突,那么就会拉出一个链表出来。

    当一个用户访问的时候,如果用户登陆过,那么我们就使用用户的id,如果用户没有登陆过,那么我们也能够前端页面随机生成一个key用来标识用户,当用户访问的时候,我们可以使用HSET命令,key可以选择URI与对应的日期进行拼凑,field可以使用用户的id或者随机标识,value可以简单设置为1。

    当我们要统计某一个网站某一天的访问量的时候,就可以直接使用HLEN来得到最终的结果了。

    c1e94a3423522c85b04fb325dfb451bd.png

    优点:简单,容易实现,查询也是非常方便,数据准确性非常高。

    缺点:占用内存过大,。随着key的增多,性能也会下降。小网站还行,拼多多这种数亿PV的网站肯定受不了

    使用Bitset

    我们知道,对于一个32位的int,如果我们只用来记录id,那么只能够记录一个用户,但如果我们转成2进制,每位用来表示一个用户,那么我们就能够一口气表示32个用户,空间节省了32倍!对于有大量数据的场景,如果我们使用bitset,那么,可以节省非常多的内存。对于没有登陆的用户,我们也可以使用哈希算法,把对应的用户标识哈希成一个数字id。bitset非常的节省内存,假设有1亿个用户,也只需要100000000/8/1024/1024约等于12兆内存。

    51580e222189c53896eb6f3fde715391.png

    Redis已经为我们提供了SETBIT的方法,使用起来非常的方便,我们可以看看下面的例子,我们在item页面可以不停地使用SETBIT命令,设置用户已经访问了该页面,也可以使用GETBIT的方法查询某个用户是否访问。最后我们通过BITCOUNT可以统计该网页每天的访问数量。

    dfc7f443f4a0853f745845d6e0baa5e5.png

    优点占用内存更小,查询方便,可以指定查询某个用户,数据可能略有瑕疵,对于非登陆的用户,可能不同的key映射到同一个id,否则需要维护一个非登陆用户的映射,有额外的开销。

    缺点如果用户非常的稀疏,那么占用的内存可能比方法一更大。

    使用概率算法

    对于拼多多这种多个页面都可能非常多访问量的网站,如果所需要的数量不用那么准确,可以使用概率算法,事实上,我们对一个网站的UV的统计,1亿跟1亿零30万其实是差不多的。在Redis中,已经封装了HyperLogLog算法,他是一种基数评估算法。这种算法的特征,一般都是数据不存具体的值,而是存用来计算概率的一些相关数据。

    f694c3d86bf31cdf39a9acc796cfef88.png

    当用户访问网站的时候,我们可以使用PFADD命令,设置对应的命令,最后我们只要通过PFCOUNT就能顺利计算出最终的结果,因为这个只是一个概率算法,所以可能存在0.81%的误差。

    优点占用内存极小,对于一个key,只需要12kb。对于拼多多这种超多用户的特别适用。

    缺点查询指定用户的时候,可能会出错,毕竟存的不是具体的数据。总数也存在一定的误差。

    文章来源:https://url.cn/5tQPEQg

    干货分享

    最近将个人学习笔记整理成册,使用PDF分享。关注我,回复如下代码,即可获得百度盘地址,无套路领取!

    001:《Java并发与高并发解决方案》学习笔记;002:《深入JVM内核——原理、诊断与优化》学习笔记;003:《Java面试宝典》004:《Docker开源书》005:《Kubernetes开源书》006:《DDD速成(领域驱动设计速成)》007:全部008:加技术群讨论

    近期热文

    LinkedBlockingQueue vs ConcurrentLinkedQueue解读Java 8 中为并发而生的 ConcurrentHashMapRedis性能监控指标汇总最全的DevOps工具集合,再也不怕选型了!微服务架构下,解决数据库跨库查询的一些思路聊聊大厂面试官必问的 MySQL 锁机制

    关注我

    8c18163518eca62a3440f185743494ef.png

    喜欢就点个"在看"呗^_^

    展开全文
  • 在上一次的闭门会上,应用试客负责人杨冲提到,苹果获取的应用信息越来越多,开发者在后台能够看到的统计数据已经很完善,...这篇文章就是讲的如何自动化地从苹果后台获取App的每日销售记录(下载),方便分析和统计...
    c58522b437f929a11a525ee46184bf36.png

    fc7dad6572f8461d1958dd7713188805.png

    3c48c05f775df0768b768fcb50fc8392.png

    在上一次的闭门会上,应用试客负责人杨冲提到,苹果获取的应用信息越来越多,开发者在后台能够看到的统计数据已经很完善,比如在做推广时非常重要的一个问题——如何区分是否被掺量【是否真实用户】,在App Store Connect中查看独立设备数就可以。

    对于运营者来说,数据非常重要,那么还有更多数据如何获取?

    这篇文章就是讲的如何自动化地从苹果后台获取App的每日销售记录(下载量),方便分析和统计。

    App Store Connect里的销售记录

    我们先看看如何通过App Store Connect网页查看和下载App的销售记录。「App分析」「销售和趋势」里都能看到每日销售明细,且可以下载对应的数据(图中红圈处)。4e4bef422f4e24e38c125fb534da20ba.pngApp分析0cddd371ad9d146798b8bf818b3dc386.png销售与趋势可惜的是,苹果并没有开放这些明细API,仅仅开放了下载”销售和趋势报告“的API,这是一个销售总报告,没有每日明细,而且报告内容的格式有些”糟糕“。550d9070ef35ccf3a021f157b2a341fc.png
    ”销售和趋势报告“长什么样?

    0801e1dd224f41bd5f7d226d34041ad6.png

    月「销售和趋势报告」示例看完上面的月报告示例(下载下来的销售报告是.gz格式的,解压后是.txt格式的,你可以用Excel打开),你的内心是否是崩溃的?。乍一看以为每一行是每天的销售明细,实际上不同的行是苹果按国家代码、货币代码、同一开发者下不同App来等指标来分的不同指标下的销售总量,只要指标有一条不一样,报告里就会单独列一行,你想知道10月份各个App的总的销售量,还得先按App分组后在对Units指标求和...日报告,和上面格式一样。如果你想知道一个月的每日销量明细,官方API下,只能一天一天的下载每天的销售报告了难道我们就这样坐以待毙了吗,当然不是!
    非官方API下,Fastlane - Spaceship 通过抓取App Store Connect - 【App分析】模块的网页数据,提供了获取到每日销量明细的API,后文详细介绍。

    获取”销售和趋势报告“的三种方式

    本文将介绍三种方式获取销售和趋势报告:
    【苹果官方】App Store Connect API:REST API,下载销售和趋势报告(.txt文件)【苹果官方】Reporter 命令行工具:.jar包,跨平台,下载销售和趋势报告(.txt文件)【第三方开源】Fastlane - Spaceship:需要Ruby环境,获取每日销售明细(json数据)
    5d3357cdfb6d7e33a29915854b0fc15d.png

    App Store Connect API

    App Store Connect API 是苹果官方提供的REST API,其中的下载销售和趋势报告API,可以下载每日、每周、每月、每年的销售和趋势汇总报告,这个和手动在网页上下载报告是一样的效果。
    请求头需要带上token,如何生成token请参考 《App Store Connect API》。
    下载销售和趋势报告GET https://api.appstoreconnect.apple.com/v1/salesReports请求参数filter[reportType]:报告类型,SALES, PRE_ORDER, NEWSSTAND, SUBSCRIPTION, SUBSCRIPTION_EVENT, SUBSCRIBERfilter[reportSubType]:报告子类型,SUMMARY, DETAILED, OPT_INfilter[frequency]:报告周期,DAILY, WEEKLY, MONTHLY, YEARLYfilter[reportDate]:报告时间,传你想获取的报告时间,格式:YYYY-MM-DD(日报;周报,周一到周天,只能传周天的时间,否则报错),YYYY-MM(月报),YYYY(年报),例如 2019-10filter[vendorNumber]:供应商号,App Store Connect - 付款和财务报告,左上角那串数字。filter[version]:接口版本号,可不传。成功返回200,返回数据为文件流,.gz(压缩文件)类型的文件,解压后为 .txt。失败返回json,会有很详细的错误提示,根据错误提示修改即可。月报 请求示例curl 'https://api.appstoreconnect.apple.com/v1/salesReports?filter[reportSubType]=SUMMARY&filter[reportType]=SALES&filter[vendorNumber]=88xxxxx&filter[frequency]=MONTHLY&filter[reportDate]=2019-10' -H 'Authorization: Bearer eyJhbGci...h5T-JUcdCP_CVuKMWgm3g' -g > /Users/Cocoakier/Movies/a.gzip(-g 是因为token中包含特殊字符)周报 请求参数示例:curl 'https://api.appstoreconnect.apple.com/v1/salesReports?filter[reportSubType]=SUMMARY&filter[reportType]=SALES&filter[vendorNumber]=88xxxxx&filter[frequency]=WEEKLY&filter[reportDate]=2019-11-17' -H 'Authorization: Bearer eyJhbGci...h5T-JUcdCP_CVuKMWgm3g' -g > /Users/Cocoakier/Movies/a.gzip注意事项(必看)参数关联组合reportType、reportSubType、frequency、reportDate这四个参数的组合必须遵循下面这张表,否则会报错。注意:周报,filter[frequency]=WEEKLY,是从周一到周天,reportDate只能传周天的日期,传其它日期会报错。746d2c8234c9ab507febb43d65daa60d.png参数关联组合报告可用性销售报告可用性是有严格时间限制的,传入还未可用的报告reportDate,会报错。下面是苹果文档上的描述:
    “销售和趋势”报告在以下时间可供下载:
    - 每日报告可于次日获取
    - 每周报告可在每周一获取
    - 每月报告可在该月月末的五天后获取
    - 年度报告可以在该年年末的六天后获取
    报告通常在太平洋标准时间(PST)早上 8 点(楼主注:北京时间00:00)提供。
    【注】每日报告、每周报告和每月报告在提供后保留一年。年度报告无限期保留。到期后,我们不再存储或重新生成报告以供下载。
    但是,由于北京时间比太平洋时间快了16小时,今天我们这边11月21日了,美国那边才11月20日,根据报告次日可用,所以报告只能看到11月19日的。这就导致了报告实际延迟了两天!即,今天只能看到前天的报告。这对运营来说恐怕是灾难的。addb5330e2ff825c13464501e7ddb45e.png报告实际上延迟了2天token无效或没有授权。我测试的时候发现,有时候会报token无效或没有授权,重新生成一个token仍然报错,实际上token没有问题,其它GET接口可以成功,是请求参数传的有问题,比如报告不可用,或者参数组合有问题,自己注意检查!6857eb98d4aa786886687ab5300e0090.png

    Reporter 命令行工具

    下载销售和趋势报告,苹果还专门提供了一个.jar的命令行工具——Reporter,这个东西只干能一件事,就是下载报告——Reporter官方文档。别看文档是java的就望而却步了,楼主最开始也有这种感觉,后来静下心来把官方文档看完了,发现这个工具虽然是java开发的,但是使用起来很简单,用来下载报告比App Store Connect API“更专业”。
    下载Reporter
    在苹果页面下载后▽【https://help.apple.com/itc/appsreporterguide/#/apda86f89da5】解压后有两个文件:(请确保两个文件在同一目录下)
    • Reporter.jar,命令行工具
    • Reporter.properties,属性文件,用于存放配置参数(访问令牌等)
    访问令牌
    Reporter需要在属性文件中配置访问令牌才能使用。访问令牌是App Store Connect 后台生成的一串字符串。
    生成访问令牌
    访问令牌有两种生成方式:
    • 去网页手动生成。App Store Connect后台 - 销售和趋势 - (左边)销售和趋势报告 - (右上角)关于报告 - 生成Reporter令牌。
    • 通过命令生成,需要输入苹果账号和密码。(详见下文API部分)。注意:开通双重认证的账号无法使用命令生成访问令牌,只能通过网页手动生成。5626fae3dc4addaabfaa864ebdcd9072.png手动生成访问令牌
    注意事项
    • 访问令牌有效期180天。每个 Apple ID 每次仅可生成一个访问令牌。如果您生成了新的访问令牌,先前的访问令牌将立即过期。
    • 您只需生成一个访问令牌即可访问销售和财务应用程序。无需生成单独的访问令牌。
    属性文件
    下载的文件中有个Reporter.properties文件,这是属性文件,用于存放Reporter的默认配置参数。
    • 每个属性单独成行,包括一个 Key 和其对应的值,值不需要加引号
    • 如果命令行中传入的属性参数,则会覆盖属性文件中的属性
    • 属性文件中的Account,并不是苹果开发者账号的值,这个值是苹果账号的隐式id,需要通过命令(见下文)获取。
    0dd804d0a134974072e5e308db632ec5.png属性文件下面是属性文件的全部key-valuee158968260bf7f3e9c2f24a3753e87ad.png
    常用命令
    打开终端,cd 到.jar包的目录,执行下列命名。命令通用格式java -jar Reporter.jar p=[properties file name] a=[account number] m=[mode] Sales.[command]java -jar Reporter.jar p=[properties file name] a=[account number] m=[mode] Finance.[command]
    生成访问令牌(根据提示输入苹果账号和密码。注意,开通了双重认证的账号无法使用该命令)
    java -jar Reporter.jar p=Reporter.properties Sales.generateToken
    返回结果
    Please type in your username: ********
    Please type in your password: ********

    Your access token has been generated.
    AccessToken:d21xxx-xxxx-xxxx-xx0a
    Expiration Date:2020-06-07
    查看访问令牌(根据提示输入苹果账号和密码)
    java -jar Reporter.jar p=Reporter.properties Sales.viewToken
    删除访问令牌
    java -jar Reporter.jar p=Reporter.properties Sales.deleteToken
    检查可用状态(校验token,返回0表示有效)
    java -jar Reporter.jar p=Reporter.properties m=Robot.XML Sales.getStatus
    返回结果
    <?xml  version="1.0" encoding="UTF-8" standalone="yes"?>
    <Status>
        <Message>Sales and Trends Reporter is currently available.Message>
        <Code>0Code>
    Status>
    获取Reporter版本(始终返回纯文本)
    java -jar Reporter.jar getVersion
    返回结果
    1.0
    获取账号列表(account num)
    一般模式(每个账号一行,用户名和ID用逗号分开)java -jar Reporter.jar p=Reporter.properties Sales.getAccounts
    返回结果
    Jane Appleseed Inc, 12345
    John Appleseed Inc, 67890
    机器人模式java -jar Reporter.jar p=Reporter.properties m=Robot.XML Sales.getAccounts
    返回结果
    <?xml  version="1.0" encoding="UTF-8" standalone="yes"?>
    <Accounts>
        <Account>
            <Name>Jane Appleseed IncName>
            <Number>12345Number>
        Account>
        <Account>
            <Name>John Appleseed IncName>
            <Number>67890Number>
        Account>
    Accounts>
    获取Vendor 编号(供应商号,下载报告需要传)
    一般模式(每个 Vendor 编号都单独成行)java -jar Reporter.jar p=Reporter.properties Sales.getVendors
    返回结果
    800xxxxx
    801xxxxx

    机器人模式java -jar Reporter.jar p=Reporter.properties m=Robot.XML Sales.getVendors

    返回结果
    <?xml  version="1.0" encoding="UTF-8" standalone="yes"?>
    <Vendors>
        <Vendor>800xxxxxVendor>
        <Vendor>801xxxxxVendor>
    Vendors>
    下载销售和趋势报告
    命令格式java -jar Reporter.jar p=[properties file] Sales.getReport [vendor number], [report type], [report subtype], [date type], [date], [version]* (if applicable)参数:[vendor number]:供应商号,App Store Connect后台-付款和财务报告,左上角那串数字;或者使用上面介绍的getVendors命令获取。[report Type]:报告类型,SALES, PRE_ORDER, NEWSSTAND, SUBSCRIPTION, SUBSCRIPTION_EVENT, SUBSCRIBER[report SubType]:SUMMARY, DETAILED, OPT_IN[date type]:日期类型,DAILY, WEEKLY, MONTHLY, YEARLY[date]:日期,YYYYMMDD,YYYYMM,YYYY使用示例(更多示例见官方文档)java -jar Reporter.jar p=Reporter.properties m=Robot.XML Sales.getReport 800xxxxx, SALES, SUMMARY, DAILY, 20191005
    返回结果
    <?xml  version="1.0" encoding="UTF-8" standalone="yes"?>
    <Output>
        <Message>Successfully downloaded S_D_800xxxxx_20150201.txt.gz.Message>
    Output>
    注意事项:1. Reporter下载报告的参数和App Store Connect API下载报告的参数基本一致,注意事项请参看App Store Connect API部分。2. 官方文档请求参数传的是首字母大写的单词,比如 Sales,经我测试,参数和App Store Connect API一样全部大写也是没有问题的,比如 SALES。3. 如果请求成功,报告会下载到当前目录下。e00882fe1e33689b37c5c0a3670ef8b3.png

    Fastlane - Spaceship

    Fastlane是一套用Ruby开发的,开源的,用于解决iOS和Android自动化编译打包、上传、发布等工作的命令行工具集。其中,Spaceship提供了一套Apple Developer Center 和 App Store Connect 的API。下面来介绍,如何通过Spaceship获取App的每日销售量。与上面两个方案不同的是,Spaceship可以直接获取到每日销售量明细,而不是下载销售报告。我们可以通过Spaceship - App Analytics模块的API来实现。下面是一个返回示例。
    {
        "size"1,
        "results": [{
            "adamId""147xxxxxx",
            "meetsThreshold"true,
            "group"null,
            "data": [{
                "date""2019-10-01T00:00:00Z",
                "units"1.0
            }, {
                "date""2019-10-02T00:00:00Z",
                "units"1.0
            }, {
                "date""2019-10-03T00:00:00Z",
                "units"0.0
            },
            ...
            ],
            "totals": {
                "value"2.0,
                "type""COUNT",
                "key""units"
            }
        }]
    }
    安装Fastlanesudo gem install fastlane你可以参考Spaceship文档一步一步操作,体验一下Spaceship的功能。Spaceship文档上提到的获取销售量的的方法,只能获取到最近7天的销量,不够灵活。sales = analytics.app_sales我阅读了app_analytics.rb源码,写了一段Ruby代码,执行下面代码即可获取到指定时间范围内某个App的销售量了。(如果你开启了双重认证,请先把下列代码保存到文件a.rb后,打开终端执行ruby a.rb,双重认证需要根据提示输入验证码)
    require "spaceship"
    require "JSON"

    APPLE_ACCOUNT = "xxxxxx@xxxx.com"            #苹果开发者账号
    APPLE_ACCOUNT_PWD = "xxxxxxxxxxxxxxxx"        #苹果开发者密码
    APP_ITUNES_ID = 148xxxxxxxx                    #APP ID
    start_t = "2019-11-01T00:00:00Z"            #查询开始时间
    end_t = "2019-11-015T00:00:00Z"                #查询结束时间
    # end_t = Time.now.strftime("%Y-%m-%dT00:00:00Z") #查询结束时间取当天

    Spaceship::Tunes.login(APPLE_ACCOUNT, APPLE_ACCOUNT_PWD) #登录App Store Connect后台
    # puts all_apps = Spaceship::Tunes::Application.all           #获取所有app信息,可以帮助你获取APP ID
    app = Spaceship::Tunes::Application.find(APP_ITUNES_ID)  #获取App对象
    sales = app.analytics.app_units_interval(start_t,end_t)         #获取 App分析-销售 信息
    puts JSON.generate(sales)    #ruby对象转JSON,并打印
    注意事项
    • 数据同样有两天延迟。Spaceship的原理是模拟网页请求,抓取网页数据。App Store Connect后台 - App 分析,显示的数据也遵循我上文说的延迟两天的规则。因此,Spaceship返回的销售数据最多只能返回前天的数据,如果查询不可用时间内销售数据,Spaceship并不会报错,只是返回的销售量为0,这点注意一下!
    • 双重认证。因为Spaceship需要登录苹果开发者账号,如果开启了双重认证,需要输入验证码,session有效期1个月。双重认证暂时没有好的对策,只能尽量用没有开启双重认证的苹果账号。(Tips:如果你是公司账号,你可以邀请一个没开通双重认证的账号加入你们团队,用这个没开启双重认证的账号进行Spaceship操作。)
    总结

    efb8c9db4fdc44d520c7c5f441a8f4c5.png

    • 苹果的销售报告有2天的延迟,实时性太差,这也是苹果官方统计在国内不太被重视的一个重要原因吧。
    • 对于公司开发者,推荐使用Reporter命令行工具,.jar包,跨平台,生成访问令牌简单,访问令牌有效期180天,适合服务器后台定期拉取销售和趋势报告,解析后存入数据库。虽然销售和趋势报告可读性不友好,但是文件里包含了丰富的字段,后台可以按需解析,灵活度更高,可定制化更强。
    • 对于个人开发者,自动化获取AppStore销售报告的需求恐怕很弱了。苹果官方的Connect App或者直接网页浏览,完全可以满足需求。如果非要选一个的话,推荐使用Spaceship,返回JSON格式数据,可读性好,直接返回明细,不需要解析报告文件。
    • 下载好销售和趋势报告,如何解析也是一个问题。如果后续有时间,我在研究一下这一块。

    参考链接:

    App Store Connect API 苹果官方文档:

    https://developer.apple.com/documentation/appstoreconnectapi

    App Store Connect 帮助 - 下载和查看报告:

    https://help.apple.com/app-store-connect/#/dev061699fdb

    Reporter 苹果官方文档:

    https://help.apple.com/itc/appsreporterguide/#/itcbe21ac7db

    Spaceship Github:

    https://github.com/fastlane/fastlane/blob/master/spaceship/docs/AppStoreConnect.md#app-analytics

    app_analytics.rb源码:

    https://github.com/fastlane/fastlane/blob/08b539854c575e891c18af173ea2bae229a720ad/spaceship/lib/spaceship/tunes/app_analytics.rb

    48aa487aafb0195b648e55b06e7d8e9a.png

    你可能错过的b5761c12e6f1281c806a322ea3941074.png5860d84b48dda4b96036c9982b4ad28c.png325630473a0f7d3178eaa6686b3a045d.png417299f69a01fc2ae245b963e527046e.png1a7a47b10192f51c7772ff171362fd82.png8b0b37eab34fe642e1a70ab56bde2044.png1b7c65bb1fe1560c8cbca993439cd8d0.png应用试客五周年,感恩回馈ef3fc0bdcc65122422094dd5677cba53.pngb2108870acb782c3d33a8a2083fcad95.png公众号回复关键字“试客”注册会员获取优惠3608dfc0412416de65028a0ff22f05c6.gif

    a1e4d88bbba2e944a23d91224d730c3e.png
    展开全文
  • 每日数据条数大在3-5条。 <p><strong>期望(必填) 期望能将随着使用时长,存储用户个人数据,最后形成统计。 <p><strong>其他的上下文/日志/截图</strong></p> <p><strong>尝试过的解决...
  • CP How-To:如何使用cPanel查看站点统计数据(awstats)http://www.netpu.net 网普科技版权所有,...它可以统计您站点的如下信息:一:访问,访问次数,页面浏览,点击数,数据流量等二:精确到每月、每日、每小
  • 数据统计功能仅限于付费用户使用,即不管是个人版/黄金版/企业版都可以使用这个功能。数据统计主要统计两方面:一是总...统计数据每日更新一次,您可以单独查询某一天的统计量如何设置请看下图: 打开个人中心 ...
  • 但是这样做的话,会因为触发器的存在造成服务器的负担(A表和B表的数据变更频繁,且每日数据量不小),因此被我的同事給否定了。 2.之前也想过:直接将写好的SQL语句交给同事,每天晚上清除C表数据,重新导入新...
  • Dr. Aleksandr Yampolskiy,作为Cinchcast和BlogTalkRadio的首席技术官,在近期的一篇文章中从Cinchcast的软硬件系统、技术选型以及经验教训等方面分享了...)整篇文章主要分为如下几部分:一、统计数据概况浏览...
  • (可选:访问新/stats/页面查看旧的统计数据!) Upgrading from 1.x or 2.x --> 3.x 编辑反.php文件并将设置修改为所需的设置。 编辑mysql_config.php或filedb_config.php(取决于您希望使用的是什么)。 上传所有....
  • 通过数据分析提升阿里巴巴咨询效果1688运营培训目录数据统计如何提升咨询常见问题分析数据统计为什么要统计数据不管店铺现在运营的好还是不好提升效果都是核心问题如果提升效果是核心问题那么我们必须清楚以下问题...
  • npm趋势 每天将抓取npm软件包下载统计信息并生成趋势页面!!!... 基本上,我将搜寻器脚本安排为每天在世界标准时间凌晨3点运行以获取统计信息,并在获取了所有可获取的信息之后,将使用该数据生成
  • 数据运营思维导图

    2018-04-26 14:24:22
    数据运营 作用&意义 知错能改,善莫大焉 —错在哪里,数据分析告诉你 运筹帷幄,决胜千里 —怎么做好“运筹”,数据分析告诉你 以往鉴来,未卜先知 —怎么发现历史的规律以预测未来,数据分析告诉你 工作...
  • n 网页服务器日志经过Sawmill分析统计后,可统计显示上传下载数据量统计时间区间存取次数以及任何存取异常状况;也能显示出某些网页的平均存取数量,藉以了解网站运作趋势,使得一行行的日志,转化为具有商业价值...
  • 2019数据运营思维导图

    2019-03-29 21:34:09
    渠道是否存在刷 什么渠道/用户启动次数多 日均使用时长 定义 活跃用户每日平均在线时长 解决问题 游戏的参与度怎么样 产品质量把控指标,游戏粘度如何 渠道质量如何 与单次使用时长结合分析留存和流失问题 用户...
  • VB与数据库今天,讲解一下VB与数据库...在很多综合的数据管理系统中,每日产生的数据量相当多,每月累计就更多了,为了方便直观的统计每日、每周、每月、指定区间范围的实际情况,所以我们需要用到这个功能。提示:...
  • VB与数据库今天,我们讲解一下在VB与...在很多综合的数据管理系统中,每日产生的数据量相当多,每月累计就更多了,为了方便直观的统计每日、每周、每月、指定区间范围的实际情况,所以我们需要用到这个功能。...
  • 加密货币的链上交易是衡量一个币种是否活跃、采用率增长情况如何的重要指标,同时它对于币价的走势也有一定的参考意义,而BCH的链上交易在最近一段时间出现了显著增长,据数据统计,其年内交易增幅超过了比特...
  • 考勤管理是一个公司基础的事务性工作,需要涉及到员工每日考勤情况,月末考勤统计,考勤数据关联绩效,工资发放几个相关的步骤,工作大而繁琐。正是由于传统的考勤管理极其耗费精力,企业纷纷转向了自动化考勤,...
  • 考勤管理是一个公司基础的事务性工作,需要涉及到员工每日考勤情况,月末考勤统计,考勤数据关联绩效,工资发放几个相关的步骤,工作大而繁琐。正是由于传统的考勤管理极其耗费精力,企业纷纷转向了自动化考勤,...
  • 作为每日交付全球网络互动接近3万亿次的云平台,Akamai交付的峰值带宽就从2007年的715 Gbps激增到2017年的61 Tbps。当我们仔细探究个中缘由,发现这些其实都要归因于OTT视频的崛起。据统计,全球互联网流量在未来4...
  • 统计最大的连续次数3个“不重复”个数统计在一列有重复的姓名中,如何统计出具体有几人 计数的问题 不相同 如何分班统计男女人数 在几百几千个数据中发现重复项 统计互不相同的数据个数 多个工作表的单元格合并计算 ...
  • Quartz.Net是一个强大、开源、轻的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数据。当然也会出现既要统计日的...
  • 从车辆每日碳排放量统计到全球气温统计…… 时下,人类正处于大数据时代,数据将人与人、人与世界联结起来,构成了一张繁密的网络,每个人都在影响着世界同时又被影响着。此外,传统的统计方法已无法快速且精准地...
  • Quartz.Net是一个强大、开源、轻的作业调度框架,在平时的项目开发当中也会时不时的需要运用到定时调度方面的功能,例如每日凌晨需要统计前一天的数据,又或者每月初需要统计上月的数据。当然也会出现既要统计日的...

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

如何统计每日数据量