10 2014 档案
摘要:keepalived是一个用于做双机热备(HA)的软件,常和haproxy联合起来做热备+负载均衡,达到高可用。运行原理keepalived通过选举(看服务器设置的权重)挑选出一台热备服务器做MASTER机器,MASTER机器会被分配到一个指定的虚拟ip,外部程序可通过该ip访问这台服务器,如果这台...
阅读全文
摘要:VRRP协议介绍参考资料: RFC 37681. 前言VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能。2. 协议说明2.1 协议VRRP协议是为...
阅读全文
摘要:软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当 前,HAProxy支持两种主要的代理模式:...
阅读全文
摘要:桶排序的核心思想就是分治处理数据,把数据按照大小分发到各个区间(区间内数据保证有序,数据结构可以使用链表,方便分发过来的新数据插入)。假设有N条数据是分布在一个固定的区间内(0,n),现在要对其排序,桶排序步骤如下1 把(0,n)划分成m个区间,像这样 (0,n/m),(n/m+1, 2n/m),(...
阅读全文
摘要:Python里面的import和from import都是用于导入一个模块,两者的区别是如果你在使用某模块内函数时不想写模块名,那么就用from import方式导入,如果是用import方式就要写模块名 比如sys.argv 如果你不想写sys 那么在代码开头就应该这样写from sys impo...
阅读全文
摘要:这里面要重点关注的是内存 120ns固态盘 50-150us机械磁盘 1-10ms 固态盘和内存差了3个数量级,可见固态盘和内存还是很有差距的机械盘和内存差了4-5个数量级,效率惨不忍睹。所以写存储系统尽量把能干的事情干完在存磁盘,不要反复读取磁盘,考虑存储方面的算法不能只是看复杂...
阅读全文
摘要:相关的类调用关系DocumentsWriterPerThread ——>DocFieldProcessorDocumentsWriterPerThread里的consumer对象(类型是DocFieldProcessor)负责field的内数据的存储1 consumer.processDocumen...
阅读全文
摘要:当两个字符串进行顺序匹配出现某字符匹配不正确时,被匹配字串的开始位置要回退,这是个不效率的工序,而KMP就是用来尽量减少回退的位置,使得重复工序降低。KMP算法的关键思路:1 先是按照正常的字串匹配方式进行匹配。2 一旦在匹配到第N+1项匹配失败时,计算匹配字符串前N项字串的”前缀“和”后缀“子串中...
阅读全文
摘要:机制:select:只支持水平触发(数据不处理完无限通知)epoll:支持水平触发和边缘触发(仅通知一次)单进程监控FD个数select: 由FD_SETSIZE设置,默认值是2048。在大量连接的情况下明显不足。epoll: 和内存有关,1G内存10W个,一般都够用。内核监控事件的策略select...
阅读全文
摘要:1 查询的总时间等于每个segment查询时间的总和2 合并的步骤 (1)做flush操作的先生成一个新的segment (2)检查在新segment之前已经存在的segment的数量是否大于maxmerge(默认是10个),大于了进行合并 (3)合并完成又会生成一个新的segment,然后把...
阅读全文
摘要:昨天给公司同事们介绍了lucene相关度打分的公式,大家提到了一个问题,总感觉用相关度排序的时候,lucene会把查询关键字相邻紧密的doc排在前面,但是打分公式里面却没提到过这个因素,所以我现在来验证下查询词的紧密程度是否会影响打分。局部代码添加doc程序1 设置lucene保存field的所有信...
阅读全文
摘要:Lucene Vint压缩策略是,用每个字节的最高位做标志位,后7位为有效算术位,如果标志位为1,则说明后一个字节和当前字节是同一个数字,为0说明后一个字节是一个新的数字Lucene源代码中进行存储和读取是这样的。OutputStream是负责写:1/**Writesanintinavariable...
阅读全文
摘要:30定律:出现频率最高的30个词占全文本总词数的30%如果剔除150个最高频率的词(由于df过大被认为是停用词):倒排表记录总个数会减少25-30%Zipf定律: 在自然语料库中所有term的freq(频度)排名和其freq(频度)的乘积大致是一个常数freq_NO1 *1 =freq_NO2 *2...
阅读全文
摘要:指的是多种成分均匀分布的情况,如果成分分布越均匀,则熵越高,相反则熵越低物理学比如某个物体由多个事物组成,如果各事物所占质量比重均匀,则质量熵就高概率学比如掷色子有6种结果,如果各结果的概率是一样的,则概率熵就高自然语言比如一个term和多个term都有搭配在一起出现的记录,如果各term出现的次数...
阅读全文
摘要:两个field,一个是KFC数据 一个列放的内容是“same”每条数据都flushSLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logge...
阅读全文
摘要:一、errno的由来 在C编程中,errno是个不可缺少的变量,特别是在网络编程中。如果你没有用过errno,那只能说明你的程序不够健壮。当然,如果你是WIN32平台的GetLastError(),效果也是一样的。 为什么会使用errno呢?个人认为,这是系统库设计中的一个无奈之举,他更多的是个技巧...
阅读全文
摘要:1 和lucene一样 支持全域索引2 对字符串域提供全文检索,对数字类型域提供范围查询3 采取和lucene类似的倒排表压缩方式4 和lucene的多级跳转表不同,egg采取的是B+树做索引,这种数据结构在应付大数量的存储上面更加适合。5 和lucene不一样, egg不仅仅是个全文检索引擎包,采...
阅读全文
摘要:167274doc 单字分词全压缩时间real 15m58.464suser 13m52.157ssys 2m3.445s空间tmpfs 12G 1.5G 11G 13% /ape/eqltmpfs-rw-rw-rw-. 1 ape ape 449M 9月 1 12:51 egg.dat-rw-rw...
阅读全文
摘要:总结: 不仅tcp协议能对数据段进行分割,ip协议也具备这个功能,之所以会这样是两者都受到底层MTU的限制(虽说tcp是根据MSS限制来分割数据包,由于MTU=tcp包头+ip包头+MSS,所以其实也算是受MTU的制约。)。但是尽量别让ip协议来负责数据包的分包工作,因为虽然ip协议会对数据包进行分...
阅读全文
摘要:BM25算法是一种常见用来做相关度打分的公式,思路比较简单,主要就是计算一个query里面所有词和文档的相关度,然后在把分数做累加操作,而每个词的相关度分数主要还是受到tf/idf的影响。公式如下:R(qi,d)是每个词和文档的相关度值,其中qi代表每个词,d代表相关的文档,Wi是这个词的权重,然后...
阅读全文
摘要:listen函数是用来设置监听连接的句柄和队列当listen函数执行完成以后,服务端就已经可以接受客户端来的新连接了,新连接完成以后listen会把客户端的ip,port和连接句柄放在监听队列里面,等待accept函数来取,如果监听队列满了,listen会拒绝新来的连接。accept仅仅是从监听队列...
阅读全文
摘要:close函数首先是将传入的socket句柄引用数减1(因为fork进程时会导致socket句柄被多个进程引用),待到引用数等于0的时候,close才会真正关闭连接。shutdown函数是立刻关闭连接(忽视句柄引用数值),关闭有三种方式SHUT_RD 关闭调用进程的读通道,调用进程立刻不能读网络数据...
阅读全文
摘要:网络程序异常退出无core文件产生这种情况发生在一边连接端已经关闭,但是另外一边还在对连接句柄做send操作,这样做send操作的进程会收到SIGPIPE信号,默认行为是直接退出且不会产生core。为了避免退出,一般在启动的时候加上 signal(SIGPIPE, SIG_IGN) 来忽略这种错误。...
阅读全文
摘要:DocFieldProcessor类的任务1 按顺序存储所有的field和对应的fieldinfo2 为当前这篇doc的field按照fieldname来建立hash索引3 调用InvertedDocConsumer类(抽象),对field的内容分词和建立内存索引DocFieldProcessor类...
阅读全文
摘要:1 一个资源同时可以有多个读写,但是只能有一个写锁2 用flag代表锁的状态,#define un_lock 0#define r_lock1 //上一把读锁加一个r_lock#define w_lock -1伪代码1 LOCK_Rpthread_lock(resource.mutex)while(...
阅读全文