GithubHelp home page GithubHelp logo

alibabamiddlewarerace's Introduction

比赛题目

对100GB的交易记录建立索引,支持后续高并发查询。查询类型包括1.单条查询,2.聚集查询,3.级联查询。具体详见大赛网址

我们队最终取得了全国总决赛冠军的成绩(线上成绩75%,答辩成绩25%),答辩PPT中展示了我们的设计思路以及优化过程。

groupPhoto.png

程序目标

你的coding目标是实现一个继承自OrderSystem接口的OrderSystemImpl类。 实现一些简单的订单查询功能。

  • construct接口负责将数据文件路径传送到OrderSystemImpl中,其中storeFolders每个路径包含一块存储设备。用于供你存储内存外的数据。
  • queryOrder、queryOrdersByBuyer、queryOrdersBySaler、sumOrdersByGood提供按照特定方式查询数据的接口,具体规则可以查看OrderSystem.java的注释部分

数据格式

有三种类型的文件,分别为订单文件、商品文件、买家文件。文件的基本格式相同。 我们对文件格式的约定如下

数据格式

  • 数据都存储在文件中,每行代表一条记录。
  • 每种类型的文件可能包含复数个文件。
  • 保证所有文件的记录中的主键不重复。
  • 每条记录包含若干Key-Value对。Key又称作字段。
  • 每条记录的字段保证不重复。
  • Key-Value对之间用制表符'\t'分隔,内容中如果出现空格,把空格当作Key或者Value的内容
  • Key为ASCII字符集中的a..zA..Z0..9_-
  • Value可以为Boolean, Long, Double, String之中的任意类型,原始数据中不会声明类型
  • 如果类型为Boolean,其对应的字符是'true'和'false'
  • 记录之间不保证顺序
  • 记录内的字段之间也不保证数据
  • 可以参考目录中的样例数据:buyer_records.txt、good_records.txt、order_records.txt

每种类型的文件中有一些字段是一定存在的,且类型固定。查询操作主要通过这些字段进行:

交易信息文件

一定包含的字段:

  • orderid - 订单号,类型为Long
  • buyerid - 买家ID,类型为String
  • goodid - 商品ID,类型为String
  • createtime - 交易创建时间,类型为Long

商品信息文件

一定包含的字段:

  • goodid - 商品ID,类型为String
  • salerid - 卖家ID,类型为String

买家信息文件

一定包含的字段:

  • buyerid - 买家ID,类型为String

提示

  • 数据量上,商品文件和买家文件总大小大于4G,订单文件总大小小于100G。
  • 数据中的某些字段比较稀有,在所有记录中出现较少。某些字段比较常见,在记录中经常出现

查询条件

一共有四种类型的查询:

  1. queryOrder,查询指定订单号的交易信息,可以指定要查询的列
  2. queryOrdersByBuyer,查询买家某个时间范围内的交易信息
  3. queryOrdersBySaler,查询卖家某个商品的交易信息,可以指定要查询的列
  4. sumOrdersByGood,对商品的某个字段进行求和

提示

  • queryOrder和queryOrdersBySaler两种查询大部分情况下只查询少量字段
  • 查询可能存在热点
  • 测试程序会并发进行查询,选手程序要保证查询接口能支持并发调用

程序打包

程序的类名一定为OrderSystemImpl,并实现一个不带参数的OrderSystemImpl构造函数,提供public访问权限。 Pom配置请参考git中的demo项目OrderSystemImpl,使用预定义的打包插件。

第二/三方库规约

  • 仅允许依赖JavaSE 7 包含的lib

测试环境

  • JDK 1.7
  • 多核CPU (暂定6核)
  • jvm 4G内存
  • 可以使用空间充足的多块磁盘(暂定3块)

测试评分

测试程序运行分为两个阶段:

  1. 数据准备阶段,从测试程序调用construct开始到测试程序返回,记录时间为T0。如果超过一小时未返回,则判定程序运行失败,不记成绩。
  2. 查询阶段,总共有n次查询。为了保证公平,每位选手的查询序列都完全相同。查询的结果会校验正确性,如果返回数据错误,则直接判定程序运行失败。 查询阶段至多运行一个小时,记录完成的查询次数x。如果程序提前完成n次查询,那么记录查询的总时间T1。

成绩排名规则:

  1. 如果x < n,那么根据x从大到小进行排名
  2. 如果x = n,那么根据 T0 + T1的总耗时从小到大进行排名

程序运行失败时,我们会给出失败的具体原因以及屏幕输出信息,供选手排查。

由于测试评分进行多天,选手的得分可能会有起伏,我们会记录得分最高的一次作为最后成绩。取得好成绩后,可以大胆的对程序继续优化,博取更好的表现。

全量提交结果

通过了417171 case,log地址

alibabamiddlewarerace's People

Contributors

carpenterlee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.