开发者社区 > 云原生 > 中间件 > 正文

【7月11日更新】阿里中间件性能挑战赛 - 第二赛季答疑汇总

本帖持续更新,大家问问题之前可以先看看这张帖子,也可以在这张帖子里提问题。


Q: 关于三方库的使用问题
A:
1. 为了公平起见,禁止使用jdk7原生以外的三方库。
2. 可以直接将常用基础开源工具类(如guava、netty)搬到自己项目中使用。可以参考和借鉴其他三方库。
3. 不允许抄袭已有开源数据库代码。我们会对复赛中排名靠前的选手进行代码review,如果发现直接抄袭则成绩作废。
4. 关于借鉴和抄袭的标准:
    借鉴:有选择的引用,能说出自己为什么选择这样写,这段代码在上下文环境中承担了什么作用,自己对开源代码做了什么样的改进。
    抄袭:大段copy,无用代码比例高,自身不理解代码的用意,仅分装开源库接口



我们不是封闭式的比赛,大家在筹备比赛期间可以去学习,去参考你能接触到的任何代码。造轮子是一种能力,使用轮子也是一种能力,大家的目的是造车。 禁止引用三方库是出于公平考虑,我们提倡大家自己造好轮子,也不反对大家搬轮子。但是你不能把一部现成的跑车直接搬进来。我们会对排行榜前面的同学进行代码review,如果有明显的抄袭数据库代码的行为的话,我们会取消他参加复赛的机会。





Q: 关于3张表的3个ID的各种问题
A:
1. orderid,buyerid,goodid可以认为就是这三张表的PrimaryKey。即这三个id不会在表中出现多次
2. orderid仅且仅对应一个goodid, orderid仅且仅对应一个buyerid。可以保证orderid对应的goodid以及buyerid一定会存在买家表和商品表中
3. 在商品表中的goodid对应于一个salerid,一个salerid可能对应于多个goodid
  

Q: 用orderid查询订单时,有没有可能查询一个在买家表、商品表中的字段?
A: 可能的。复赛的查询的所有数据,都是基于在对三张表做了join的前提下进行查询。


Q: 样例数据中的app_buyer_xxx是什么意思?
A: 这是模拟数据。会被查询查到,不要理解为无效数据。

  
Q: 提交代码时,OrderSystem对象是通过maven依赖还是放到自己的代码中?
A: 将OrderSystem.java放到自己代码中。


Q: 第三类查询,通过salerid和goodid查询订单,既然已经提供了goodid,为什么还要提供buyerid?
A: 理论上通过goodid就可以查出想要的订单来。并且,测试中不会有反向case以正确的goodid+错误的salerid进行校验。


Q: 查询中是否可能查询不存在的records或者不存在的字段
A: 可能,按照OrderSystem.java中的规约返回数据。


Q: 最终运行时的硬件环境是怎样的?
A: 目前机器还没下来,所以运行时环境还未完全确定。可以按以下条件暂时进行预估,
CPU: 5 ~ 6核
查询并发数: 10 ~ 20
存储:
一共有3块磁盘,原始数据均匀存放在3块磁盘中。你的程序产生的中间数据也会放在这3块磁盘中 (存储这块和我之前解释的有些不一样,根据机器情况进行了调整,请大家注意以下)
内存:
测试程序会占用一定内存,所以JVM内存会设置为5g,如果你要计算jvm可用内存量的话,请以4G作为参考。

展开
收起
中间件那珂 2016-07-11 11:25:58 7685 0
11 条回答
写回答
取消 提交回答
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    要用数据库吗
    2016-07-18 13:35:24
    赞同 展开评论 打赏
  • 一起学习
    Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    请问,数据时部分有序还是完全无序的?
    2016-07-16 20:08:37
    赞同 展开评论 打赏
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    不是说第二赛季通知本周以邮件形式发出的吗?怎么我还没收到邮件的?

    -------------------------

    Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    Q: 用orderid查询订单时,有没有可能查询一个在买家表、商品表中的字段?
    A: 可能的。复赛的查询的所有数据,都是基于在对三张表做了join的前提下进行查询。
       * @param keys 如果为null,则查询所有字段,
      Result queryOrder(long orderId, Collection<String> keys);

    是不是:@param keys 如果为null就查询三张表join后的所有字段。

    -------------------------

    Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总

    Q: 用orderid查询订单时,有没有可能查询一个在买家表、商品表中的字段?
    A: 可能的。复赛的查询的所有数据,都是基于在对三张表做了join的前提下进行查询。


    /**
       * 查询订单号为orderid的指定字段
       *
       * @param orderid
       *          订单号
       * @param keys
       *          待查询的字段,如果为null,则查询所有字段,如果为空,则排除所有字段
       * @return 查询结果,如果该订单不存在,返回null
       */
      Result queryOrder(long orderId, Collection<String> keys);


    是不是可以理解为:@param keys 待查询的字段,如果为null就查询三张表join后的所有字段。


    /**
       * 查询某位买家createtime字段从[startTime, endTime) 时间范围内发生的所有订单的所有信息
       *
       * @param startTime 订单创建时间的下界
       * @param endTime 订单创建时间的上界
       * @param buyerid
       *          买家Id
       * @return 符合条件的订单集合,按照createtime大到小排列
       */
      Iterator<Result> queryOrdersByBuyer(long startTime, long endTime,
          String buyerid);


    是不是可以理解为:@return 符合条件的订单集合(包含三张表Join后的所有字段)。


    /**
       * 查询某位卖家某件商品所有订单的某些字段
       *
       * @param salerid 卖家Id
       * @param goodid 商品Id
       * @param keys 待查询的字段,如果为null,则查询所有字段,如果为空,则排除所有字段
       * @return 符合条件的订单集合,按照订单id从小至大排序
       */
      Iterator<Result> queryOrdersBySaler(String salerid, String goodid,
          Collection<String> keys);


    是不是可以理解为:@param keys 待查询的字段,如果为null,则查询三张表join后的所有字段。




    /**
       * 对某件商品的某个字段求和,只允许对long和double类型的KV求和 如果字段中既有long又有double,则使用double
       * 如果求和的key中包含非long/double类型字段,则返回null 如果查询订单中的所有商品均不包含该字段,则返回null
       *
       * @param goodid 商品Id
       * @param key 求和字段
       * @return 求和结果
       */
      KeyValue sumOrdersByGood(String goodid, String key);


    是不是可以理解为:如果查询订单中的所有商品或买家信息均不包含该字段,则返回null


    最后,建议更新接口类的注释以免造成误解。

    -------------------------

    Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    最后,建议更新接口OrderSystem的注释以免造成误解。
    2016-07-15 16:03:31
    赞同 展开评论 打赏
  • ReRe【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    引用第9楼hujianhong于2016-07-14 15:55发表的 Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总 :
    数据集中的单个文件的大小有没有一个上限?就是说每个文件最大的大小 [url=https://bbs.aliyun.com/job.php?action=topost&tid=288212&pid=804643][/url]
    同问!
    2016-07-15 09:41:44
    赞同 展开评论 打赏
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    数据集中的单个文件的大小有没有一个上限?就是说每个文件最大的大小
    2016-07-14 15:55:55
    赞同 展开评论 打赏
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    demo中给的交易、买家、商品记录中的字段和官网赛题中给的字段不太一致,是以demo为主吗?也就是说每一个记录的字段不尽相同?
    2016-07-14 15:00:20
    赞同 展开评论 打赏
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    2、3两个查询 如果没有对应的结果的话返回的是空集合还是null?
    2016-07-14 14:58:20
    赞同 展开评论 打赏
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    关于第三方库. Guava里面的Cache这是可以直接用的节奏吗...另外, 像Kryo这种东西, 算是基础工具库吗...自己手写一遍是否copy就不太好界定了, 因为很容易很相似...另外, 像Guava等工具库, 自身依赖了一堆东西, 比如javassist...没有办法搬进项目..
    2016-07-12 23:57:59
    赞同 展开评论 打赏
  • Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    我在里面看到了Netty,请问下是你们准备的数据在一个机器上,我们的磁盘空间在另外一个机器上,需要把数据挪到自己的空间上吗?
    2016-07-12 20:45:50
    赞同 展开评论 打赏
  • 回 1楼(runtimeerror) 的帖子
    查一次校验一次。如果发现错误立即退出。

    测试程序除开少量常驻对象外(如并发控制),绝大部分对象都是短周期对象。

    -------------------------

    回 5楼(一树斜阳) 的帖子
    你说的这两个都能用。搬代码要有选择的搬。

    2016-07-12 19:50:47
    赞同 展开评论 打赏
  • 目前就职于阿里云数据库团队,阿里云自研云原生数据仓库 AnalyticDB 优化器负责人,HBase/Cassandra contributor。
    Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    第五个问题描述打错啦。。。

    测试程序需要用1G内存。。。那它的测试行为是怎样的(内存行为,想考虑GC影响)?每次查询后保留结果,统一校验,还是差一次校验一次,然后丢弃?

    -------------------------

    Re【7月11日更新】阿里中间件性能挑战赛第二赛季答疑汇总
    关于三方库
    scop=test 的 junit 对提交影响不?

    2016-07-12 09:57:16
    赞同 展开评论 打赏
滑动查看更多

为企业提供高效、稳定、易扩展的中间件产品。

相关电子书

更多
金融分布式中间件分享 立即下载
无需部署的前端中间件技术——企业移动化新思路 立即下载
《云原生中间件精品案例集》 立即下载