• Redis安装与配置

    下载安装 下载: wget -c http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz 编译安装: PREFIX=/redis_path_to_install make PREFIX=/redis_path_to_install make install PREFIX 指定安装路径 测试: make test Redis配置 # Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes...


  • python自定义安装

    Installation You can easily build your own Python binaries and libraries by following the steps below: Retrieve the sources from the official website: http://www.python.org/download/ Unpack, compile and install Python (any version, here with Python 2.7): cd <compilation-directory> tar jvzf Python-2.7.tar.bz2 cd Python-2.7 ./configure --enable-shared [--prefix=/your/custom/installation/path] make make test make install...


  • 排行榜算法设计

    LeaderBoard 排行榜在游戏中非常常见的功能之一,在游戏中有各种排行榜,如工会活跃度,玩家的英雄战斗力排行等。当数据上亿时,如果使用数据库直排是致命的慢,远远超出用户接受的响应时间。也对数据库造成非常大的压力。本文将会讲述千万用户级别的用户排行系统的一些设计理念并讲述数据库直排以及使用桶排和内存数据优化排行榜。 在讲述设计前,有必要先了解一些基础理论,文章将会先讲述什么排行榜的类别,排行规则和排名分布,然后进一步结合以往写的一个简单的排行系统Nagi,讲述数据库直排和使用桶排技术,以及内存缓存技术等。 排行榜的类别 刷新频率 如果以排行榜的刷新频率来分类可分为及时排行榜,和周期排行榜。 及时排行榜 排行榜的排名能及时反映用户的排变名化,但可能是近似的排名。 周期性排行榜 排行榜将会在一定周期内刷新排名,如日排行,周排行,月排行等 准确性分类 精准排名 能够准确的反应当前玩家的某段时间,或者当前的排名。 近似排名 近似排名能够反映用户的排名变化和接近真实排名也许会稍稍低于真实排名,或者高于真实排名。总之可能与真实的排名有一定差别。 排行规则 排名规则,这里并不是如竞技场,使用交换排名的方式,一个新用户进入竞技场时只要简单的统计下当前竞技场用户数量就可以初始化其排名,随着玩家挑战高名次的玩家,如果胜利就交换名次这类规则。而是诸如工会活跃度可能是当前工会所有工会成员的活跃度总和作为工会活跃度、或工会所有玩家战斗力总和作为工会战斗力。这类因为最后由唯一属性(如工会活跃度,工会战斗力)决定排名的归为简单排名(唯一属性排名)。 你可能会为担忧如何计算工会的战斗力。那么考虑一个简单的游戏功能如签到排名,规则是用户每天签到将会记录用户最近连续签到的天数,如果某天用户忘记签到,那么用户签到天数将会从零开始重新计算,除非用户补签。如果用户签到天数越多,那么用户排名越高这类就是简单的排名,仅有单一属性决定玩家的排名。但是由于这个排名可能因为大多数用户都在游戏开始就持续的签名,这样就会有很多玩家排名一致,但为了保证每个用户都有不同的排名,于是将由用户id来区分排名,id越小排名越靠前,这类排名签到天数结合用户id就有多个属性决定排名就是复合属性排名。 用户排名的分布 在设计排名系统时一定要注意到用户排名的分布,正如上面讲到签到系统,是非常符合‘二八法则’的,大多数用户的排名将会非常接近或者相同。这类分布也可能会相近于正太分布。两端的用户越来越少,中间用户越来多。这样造成大量用户的排名相同。所以如果有可能应该制定比较好的游戏规则,使用户的排行分散均匀。 算法设计 算法设计将结合个人一个项目Nagi来讲述具体设计。 Nagi是一个抽象的排行榜系统,在系统中把所有需要排行的数据抽象成一个具有一个积分的实体对象。并且可以排行多个排行榜,数据库使用的是MySQL。 基础表设计 用户积分表(实体表) CREATE TABLE entries ( eid INT(11) unsigned NOT NULL COMMENT 'The unique identifier for a entry in a leaderboards.', lid MEDIUMINT(8) unsigned NOT NULL, score...


  • Linux系统的文件描述符进程限制配置

    ulimit命令使用 查看某个进程当前 ulimit 所有设置: cat /proc/<pid>/limits 永久修改某个用户或组的配置,见文件 /etc/security/limits.conf 可以通过 lsof -p 查看进程打开文件数 Linux/Centos/RHEL的进程限制,打开文件描述符限制配置 Max Number of ulimit open file : It’s provide open file resource availability in linux Increase max number of ulimit open file in Linux. 1 Step : open the sysctl.conf and add this line fs.file-max = 65536...


  • SBT&Spark使用

    Spark项目打包和发布 ###SBT 常用命令 actions – 显示对当前工程可用的命令 update – 下载依赖 compile – 编译代码 test – 运行测试代码 package – 创建一个可发布的jar包 publish-local – 把构建出来的jar包安装到本地的ivy缓存 publish – 把jar包发布到远程仓库(如果配置了的话) sbt-assembly 使用sbt-assembly打jar主要有两个版本0.11.2和0.13.0 对于0.11.2版 在project目录加 assembly.sbt 写入: $ cat project/assembly.sbt addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2") 然后在项目根目录加入 build.sbt ,因为spark包含了scala库所以不需要再次包含。 import AssemblyKeys._ name := "Simple Project" version := "1.0"...