分布式高维空间近邻搜索项目开发

项目名称

分布式高维空间近邻搜索

项目描写叙述

眼下在互联网上高维空间搜索的算法非常多,但性能都不尽人意。比方KD树算法,强调互联网,是指本人能在互联网上搜索到的相关算法,假设某个公司内部有自己研究的算法也可能有不错的性能表现。

測试KD树的性能,50维度的数据,100万的数据用了600多毫秒,并且搜索结果与线性搜索的结果相差还非常大。鉴于此,我自己研究了一个搜索算法。64维度,100万的数据量,搜索前十个近期邻点,大概在200毫秒左右(PS:通过修正bug,算法在此环境中达到了20ms以内搜索速度),并且结果与线性搜索误差不大。

搜索算法特点

1.对于邻近点越近的搜索就越快点

2.对于算法是基于内存的。理论上单机的搜索能力能够达到上亿(内存限制大小)

3.算法是增量的,对于新增的数据能够在一定时间内被搜索到(新增数据这个功能还没有实现,理论上非常easy实现的)

4.搜索过程是能够增量搜索的,也就是说假设一个点在业务中之中假设在第一搜索不到合适结果,能够第一次搜索的基础上扩大搜索范围,从而不会消耗过多的性能

项目架构

项目架构图

这个架构有点相似于solr的架构,不论什么应用程序都能够内嵌一个搜索client以提交搜索请求,提交搜索请求须要载入一些元信息。这些信息不会非常大,依据元信息进行http分发搜索请求,并依据搜索结果进行合并

合作开发内容

须要开发的分为三大部分:

1.第一部分是底层通讯部分

2.第二部分是算法的完好

3.第三部分是算法与框架的结合

项目开发语言:

JAVA,C++

技能要求

1.至少一年的java开发经验,最好也懂得写页面

2.对netty熟悉

3.了解HA原理

搜索演示:

搜索平台訪问地址:http://moxuqiang.6655.la

搜索方式:在文本框内输入50维的记录并点击搜索。一次仅仅能搜一条记录;

得到对应的搜索结果例如以下:

搜索结果里展现了前十个搜索点与邻近点的距离以及邻近点记录信息,及搜索耗时

因为比較匆忙,对输入没有进行全面的检查,所以请依照教程严格输入搜索记录

搜索数据集下载地址:http://pan.baidu.com/s/1kUj2gar

联系方式

有意合作者可通过下面方式联系

QQ:578038303

微信可通过QQ号搜索

时间: 2024-08-25 01:05:26

分布式高维空间近邻搜索项目开发的相关文章

第九章 企业项目开发--分布式缓存Redis(1)

注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码: <!-- redis:多台服务器支架用什么

企业项目开发--分布式缓存Redis

第九章 企业项目开发--分布式缓存Redis(1) 注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题)? 见<第八章 企业项目开发--分布式缓存memcached> 1.2.有了memcached,为什么还要用redis? 见<第一章 常用的缓存技术> 2.代码实现 2.1.ssmm0 pom.xml 只在dev环境下添加了以下代码

第十章 企业项目开发--分布式缓存Redis(2)

注意:本章代码是在上一章的基础上进行添加修改,上一章链接<第九章 企业项目开发--分布式缓存Redis(1)> 上一章说了ShardedJedisPool的创建过程,以及redis五种数据结构的第一种String类型的常用缓存操作方法.下面说余下的四种: list(有序列表) set(无序集合) sorted set(有序集合) hash 1.ssmm0-cache 1.1.RedisListUtil(有序列表工具类) 1 package com.xxx.cache.redis; 2 3 im

第八章 企业项目开发--分布式缓存memcached

注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存越来越小,最后系统会被拖慢(这一点与第二点联系起来) 本地缓存存于本机,其缓存数量与大小受本机内存大小限制 本地缓存存于本机,其他机器的访问不到这样的缓存 解决方案:分布式缓存 Jboss cache:缓存还存于本机,但是会同步更新到其他机器(解决了第三个问题,解决不了第一和第二个问题),如果缓存机器数量很多

嵌入式linux 项目开发(一)——SQLite数据库

嵌入式linux 项目开发(一)--SQLite数据库 一.SQLite数据库简介 SQLite是一个开源的嵌入式关系数据库,是一种轻量级的.自给自足的.无服务器的.无需配置的.事务性的SQL数据库引擎,其特点是高度便携.使用方便.结构紧凑.高效.可靠,体积小,支持 ACID(原子性.一致性.独立性及持久性Atomicity.Consistency.Isolation.Durability)事物. SQLite官网:http://www.sqlite.org/ SQLite数据库采用模块化设计,

大数据技术之_18_大数据离线平台_01_项目开发流程+大数据常用应用/分析平台/业务处理方式+数据分析平台的数据来源+数据处理的流程+项目集群的规模+需求分析+技术架构/选型

一.项目开发流程1.1.项目调研1.2.项目需求分析1.3.方案设计1.3.1.概要设计1.3.2.详细设计1.4.编码实现1.4.1.单元测试1.4.2.集成测试1.4.3.压力测试1.4.4.用户测试二.大数据常用应用2.1.数据出售2.2.数据分析2.2.1.百度统计2.2.2.友盟2.2.3.其他统计分析组织2.3.搜索引擎2.3.1.solr2.3.2.luence2.3.3.luence & solr 对比2.4.推荐系统(高数)2.4.1.技术2.4.2.算法2.5.精准营销2.5

Android 实践项目开发 总结

  Android 实践项目开发 总结 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________       指导老师:娄嘉鹏          实验日期 :2015.12.06. 实验名称:                   android 百度地图开发 实验目的与要求: 1.实现定位 2.查询公交路线       3.目的地查询 实验目的: 在这次的项目开发中,我做的软件主要功能是调用百度地图的接口,实现定位.查询公交路线 和查

第十一章 企业项目开发--消息队列activemq

注意:本章代码基于 第十章 企业项目开发--分布式缓存Redis(2) 代码的github地址:https://github.com/zhaojigang/ssmm0 消息队列是分布式系统中实现RPC的一种手段. 1.消息队列的基本使用流程 假设: 我们有这样一个需求,当每注册一个admin的之后,就写一条日志log数据到数据库. 分析: 在实际中,我们是不会把日志直接写入数据库的,因为日志数据通常是庞大的,而且日志的产生是频繁的,如果我们使用数据库存储日志,哪怕是使用异步存储,也是极耗性能的.

[转]基于Starling移动项目开发准备工作

最近自己趁业余时间做的flash小游戏已经开发得差不多了,准备再完善下ui及数值后,投放到国外flash游戏站.期间也萌生想法,想把游戏拓展到手机平台.这两天尝试了下,除去要接入ane接口的工作,小游戏本身不用做任何改动就可以迁移到android和ios手机平台.只是在手机上,游戏的掉帧情况非常严重,远达不到pc上的体验效果.看来做flash移动游戏,不用starling框架是不行的.打算这几天学习下starling,对项目进行改造. 基于Starling移动项目开发准备工作 转自: Starl