文档章节

多个索引的内存数据结构guavaTable.md

北京起航
 北京起航
发布于 2015/06/11 19:57
字数 299
阅读 16
收藏 0

多个索引的数据结构 用guavaTable.md
开发中经常遇到多列索引的内存数据结构,原来的做法是 用 Map<key100, Map<key200, Object>>来实现,稍复杂[写着不方便,用着也不方便;代码也不好理解]。 其实guava 有封装好的 Table 集合类型,来满足次业务场景。 Table支持“row”和“column”,而且提供多种视图。

Table<Integer, Integer, String> table = HashBasedTable.create();
       
table.put(1, 1, "11");
table.get(1,1);

项目代码

/**
* key=用户id ,value = 多列索引 table     key1:活动id key2:是指标id
*/
private LoadingCache<String, Table<String, String, ActivityLatestData>> dataCache;
dataCache = CacheBuilder.newBuilder().maximumSize(5000).build(
    new CacheLoader<String, Table<String, String, ActivityLatestData>>() {
        public Table<String, String, ActivityLatestData> load(String userId) throws Exception {
            return getUserTableData(userId);
        }
    }
);

table初始化

private Table<String, String, ActivityLatestData> getUserTableData(String userId) {
 Table<String, String, ActivityLatestData> table = HashBasedTable.create();
        IActivityLatestDataService userService =PointApp.getService(IActivityLatestDataService.class);
        ActivityLatestData pojo = new ActivityLatestData();
        pojo.setUserId(userId);
        List<ActivityLatestData> datas = userService.getByPojo(pojo);
        for (ActivityLatestData data : datas) {
            table.put(data.getActivityId(), data.getMetricId(), data);
        }
        return table;
}
```
获取数据

```
ActivityLatestData latestData = table.get(activity.getId(), metricId);
```

© 著作权归作者所有

共有 人打赏支持
北京起航
粉丝 55
博文 52
码字总数 29304
作品 0
海淀
架构师
私信 提问
DTCC2013:eXtremeDB内存数据库性能优化

【IT168 现场报道】2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕。在为期三天的会议中,大会将围绕大数据应用、数据架构、数据管理(数据治理)、传统...

it168网站
2013/04/18
0
0
高维向量快速检索方法Locality Sensitive Hashing之二算法改进

位置敏感哈希是当前高维空间中近似近邻(Approximate Near Neighbor, ANN)搜索速度最快的解决方法,LSH在汉明空间进行搜索,E2LSH是对LSH的改进之一,在欧氏空间进行搜索。与基于树的索引方法...

holygao
2018/06/28
0
0
用Golang写一个搜索引擎(0x08)

我觉得这个标题应该改改了,我写下来其实是告诉大家怎么写一个搜索引擎,并没有涉及太多的Golang的东西,我觉得这样也挺好,熟悉了原理,用什么实现其实并不重要了,而且说说原理比说代码更实...

wyh817
2016/05/05
108
0
存储与索引------《Designing Data-Intensive Applications》读书笔记3

在上一篇的笔记之中,我们讨论了数据模型和查询语言。在第三章之中我们来聊一聊不同的数据引擎内部是如何实现存储和检索的,以及不同设计之间的折中与妥协。 1.键值对数据库 键值对数据库是数...

LeeHappen
2017/12/26
0
0
MySQL管理之 MyISAM和InnoDB存储引擎简单对比

有 一、MyISAM引擎: 1、隔离事务界别: 由于myisam的隔离事务级别是串行。采用的是表级锁,不支持事物和全文索引。因此不适用在大并发,重负荷的生产系统上。 2、实例的崩溃恢复: 当系统宕...

zuzhou
2015/03/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对Docker了解多少?10分钟带你从入门操作到实战上手

Docker简述 Docker是一种OS虚拟化技术,是一个开源的应用容器引擎。它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有linux系统中(Windows10目前也原生支持,W...

别打我会飞
26分钟前
1
0
Java自定义注解及应用

前沿 java目前只内置了三种标准注解 注解 解释 @Override 表示当前的方法定义将覆盖超类中的方法。如果你不小心拼写错误,或者方法签名对不上被覆盖的方法,编译器就会发出错误提示 @Depreca...

细节探索者
29分钟前
1
0
Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpeg有非常强大...

红土豆
33分钟前
1
0
谈谈lucene的DocValues特性之SortedDocValuesField

lucene的DocValues不同于document文档级别的存储,它是一个面向列的存储结构,提供从文档编号到值的映射功能。根据不同的数据类型和应用场景支持多个DocValuesField类型,SortedDocValuesFi...

FAT_mt
46分钟前
3
0
漏洞防御与修复工作

导读 漏洞管理工作是企业安全建设必不可少的一环,在风险管理工作中,漏洞管理能够防患于未然,企业对漏洞管理有着广泛的基础建设和实践经验。但随着攻防技术的发展,传统漏洞管理的安全技术...

问题终结者
49分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部