搜索

PostGIS相关


PostGIS相关


PostGIS Geography Type 和 Geometry Type的区别
1.geometry和geography的区别:

  • geometry:planar 平面坐标系
  • geography: terrestrial 地理坐标系
  1. geometry转geography的方法:
  • geography::STGeomFromText(boundary.ToString(), 4326)
    boundary是geometry类型的,4326是坐标系的参数,4326代表GCS-WGS-1984坐标系,是系统默认的坐标系。
    
  1. 查询方式
    1
    2
    select *, ST_Distance(st_setsrid(st_makepoint(display_x,display_y),4326)::geography,
    st_setsrid(st_makepoint(arrive_x,arrive_y),4326)::geography) as dis from poi_bak;

百度地图架构


百度地图移动客户端架构演变

一个引擎
多个平台
三大架构

发展历程

  • 1.0 跨平台架构
    • vi 跨平台引擎
    • UI和引擎的交互:发送消息
  • 2.0 组件化架构
    • 组件模型源于COM思想
    • 自底向上进行组件化
    • SDK处理和UI的接口。
    • SDK和组件之间用消息通讯
  • 3.0 平台话架构(现在)
    • 驱动:业务扩张爆炸,地图的平台型使命
    • 目标:解耦开发、解耦发布、做出平台化产品
    • 架构图:
    • 插件系统:
      • NA插件
      • 地图通用Hybrid插件
      • 糯米Hybrid插件

BAT及其他APP架构特点

  • A : 淘宝、支付宝、天猫
    • NativeApp + Web App混合模式;一切皆组件(bundle)
  • T :
    • QQ:
    • 微信:插件架构、解耦,分离部分模块到独立进程
    • QQ空间:Hybrid
  • B:
    • 手百:APS插件
    • 地图插件平台
    • 糯米Hybrid框架
  • 技术优化点:
    • 首屏加载优化
      **

自然语言处理(NLP)

NLPC命令行工具安装&配置
wget http://nlp.baidu.com/platform/public/ewebeditor/nlpcdoc/new_arc_demo_tmp/nlpc_tool_new_arc.tar.gz

下载后解压,并下载相应的配置文件,将配置文件解压后,将config目录放在命令行工具的同级目录下,即可使用NLPC命令行工具

如果你想使用remote版本:请下载remote版config。
如果你想使用local版本:请下载local版config。local 版本程序执行之前需要在机器上安装运行simp_cache服务。
如果你想在Hadoop上使用NLPC命令行工具,在Hadoop上使用方法和在本地使用方法稍有不同,具体方法请参考:如何在Hadoop上使用NLPC命令行工具

TCP/IP实现及常见问题

TCP/IP实现及常见问题

  • 总体框架
  • tcp/ip报文
    • socket程序?
    • socket读写
      • 发送
        • 内存拷贝
        • 组包加包头
        • 拥塞控制
        • 超时重传
        • 路由
        • 排队与流控
      • 接收
        • 中断通知
        • 解包去包头
        • 状态转换
        • 回复ACK
        • 唤醒接收线程
        • 内存拷贝
  • 如何确保对端收到数据?

  • 三次握手详解

    • TCP协议实现
      • 面向连接
      • 全双工
      • 基于字节流
      • 可靠

存储系统的设计分析

存储系统

  • 行存储
    • 优点:
      • 所有的列数据组织在一起,易于一次性读写,减少seek
      • 主键索引开销小
    • 缺点:
      • 难以add\del\mod列;
      • 为主键之外的列建立索引代价较大。
    • 代表:leveldb\innodb\comdb\sortedtable
  • 列存储:
    • 优点:
      • 利于查询部分列,减少IO消耗
      • 利于按列进行数据聚合,max,sum
      • 易于横向扩展,add/del/mod列
      • 易于为列独立地建立索引
      • 更有利于压缩(列的相关度较高)
    • 缺点:
      • 如果经常一次性操作所有列,seek或查询操作与列数成正比
      • 需要更多的存储空间用于和主键关联
    • 代表:
      • bigtable\hbase
        图:

分区(Partition)

  • 水平分区(Horizontal Partitioning)
  • 垂直分区(Vertical Partitioning)

键值存储(K-V Storage)

  • 基本操作:set\get\delete
  • 内存索引:哈希表、B+树、跳表 _
  • 技术难点:Index Algorithm\Multi-Version\

几种典型的K-V存储引擎

  • Bitcask
    • 日志型;append only
    • 只有一个文件是可写的:active data file
    • 老文件:older data file. 需要定期进行merge,同一个key的多个操作只保留最新的一个写入data file.
    • 代表:百度的comdb;豆瓣的beansdb;Riak
  • Comdb
    • Comdb和BitCask的区别:
      • Comdb的key必须为64位
      • 可以查询部分列。
  • Comdb与Bitcask的缺陷:
    • 内存索引采用哈希表维护,内存消耗过大,一张表不能保存过多数据
    • 不支持Range Search,因为key是无序的
    • 不支持多版本
    • 不利于数据压缩
  • LevelDB:
    • LSM-Tree的实现,支持range query
    • 采用skip-list作为内存索引,key和value都可以是二进制

社区常用存储技术介绍

  • 需求:
    • 功能、性能满足需求
    • 支持快速开发
    • 足够稳定
    • 好运维
  • 发展与演进:
    • 小型网站:Mysql
      • 功能最强大,sql支持模式最丰富,支持快速开发;
      • 足够稳定,久经考验
      • 性能满足需求
      • 运维成熟,数据可读,调试方便
      • 支持事务,确保一致。
    • 演进-多机
    • 演进-cache:减轻读压力(数据cache)/在nginx前加入静态cache(page cache)
      • 关于cache:
        • 提高命中率
        • 避免脏数据:冻结时间(del后冻结5s);del后5s后再del一次
        • 基于一致性hash的cache集群:希望即使有死机,cache的命中率也不要下降
    • 中型网站
      • 垂直拆分
        • 功能维度的数据拆分
      • 主题拆分
  • 大型网站存储技术
    • 引擎选择
      • nosql数据模式
        • kv:mola
        • ordered kv (链表)
        • big table
        • document(mongoDB:单表查询)
        • sql
    • 资源定位与负载均衡
      • 伽利略系统:基于zookeeper
      • 资源定位:bns
      • 负载均衡:流量均衡、性能强弱
      • 交互之集大成者:ral
        • 社区交互中间件
    • 集群化与分布式
      • 分布式的本质
        • 屏蔽拆分、冗余细节
        • 解决运维问题
      • 单机引擎和分布式引擎相同:
        • mysql->ddbs
        • 单机kv->mola
        • memcached集群
        • redis集群
        • 长拉链引擎
    • 消息队列技术
      • 架设在前端与数据、系统与系统之间的桥梁
        • 异步、解耦
        • 消息传输、分发
        • 时序、并发
      • 代表:
        • apache kafka;nmq;bigpipe;

SVN命令总结

回滚

1
2
3
4
svn log filename #找到最新版本
svn diff -r 28:25 [something] #对比
svn merge -r 28:25 something #回滚
svn commit -m ''


svn: ‘.’ is not a working copy

1
svn clean

读书笔记

黑客与画家

  • 换位思考
  • 找出用户痛点,不要和市场已有软件重合
  • 在思想和言论之间画一条界限,在心里无所不想,但是不要说出来
  • 帕金森定律:因为你必须做到,所以你能做到
  • 比较软件的标准是对手的软件将来有什么功能,而不是现在有什么功能
  • 我们这个世界,你向下沉沦或者向上进取,都取决于你自己
  • 要致富,你需要两种东西:可测性和可放大性。你的职位产生的业绩,应该是可以测量的;你做出的决定能够产生巨大的效应。
  • 收购公司:促成买方掏钱的最好方法不是让他看到有获利的可能,而是让他感到失去机会的恐惧。
  • 充满自信的人常常像燕子一样,以一种居高临下的姿态,轻盈的看待周围的一切。
  • 快速用几根线画出一个大致轮廓,再逐步加工草稿
  • 如果你觉得画某样东西很乏味,那么画出来的东西就会真的很乏味
  • 画作永远没有完工的一天,你只是不再画下去而已。
  • 布鲁克斯假说:程序员一天写出的代码行数是一个常量,与他用什么语言无关。
    *

PHP类库


PHP类库:
PHP多进程处理

1
2


缩略图


PHP脚本处理

  • PHP传参
    1
    2
    $param_arr = getopt('a:b:');
    print_r($param_arr);

执行

1
2
3
4
5
6
7
8
9
10
11
[root@DELL113 lee]# /usr/local/php/bin/php test.php -a 345
Array
(
[a] => 345
)
[root@DELL113 lee]# /usr/local/php/bin/php test.php -a 345 -b 12q3
Array
(
[a] => 345
[b] => 12q3
)

  • PHP获取文件最后一行当文件合法,即有文件结束符才可以使用,否则fseek无法执行。此时,用tail -n 1 $file
  • CI空白框架:

PHP开发经验

  • 当一个字符串本身不是不合法(不是字符串)时,用echo``print_r都无法打印,用var_dump可以打印,但是数据结果后,后面的所有代码都无法执行。
  • 执行shell命令
    • system($command):会输出结果
    • exec($command, $output):不会输出结果