文档章节

多个索引的内存数据结构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
06/28
0
0
存储与索引------《Designing Data-Intensive Applications》读书笔记3

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

LeeHappen
2017/12/26
0
0
用Golang写一个搜索引擎(0x08)

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

wyh817
2016/05/05
108
0
浅谈MySQL的B树索引与索引优化

MySQL的MyISAM、InnoDB引擎默认均使用B+树索引(查询时都显示为“BTREE”),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引结构,理解常见的MySQL索引优化思...

猴子007
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue- 对象语法 v-bind:class与对象语法的使用

我们可以传给 v-bind:class 一个对象,以动态地切换 class 。 <div v-bind:class="{ active: isActive }"></div>//对象语法也就是在v-bind:class绑定一个对象的时候,里面的值将影响最终取值...

文文1
7分钟前
0
0
epoll中使用

1、一个线程epoll_wait时,另一个线程调用epoll_ctl是安全的。 2、使用edge触发,在socket有数据到来后,不收取数据,再次调用epoll_ctl将socket加入,仍会触发下一次动作。 asio用该方法来发...

gelare
35分钟前
1
0
PHP规范PSR2

PSR标准 - PSR-2 为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的。 各个成员项目间的共性组成了这组代码规范。当开发者们在多个项目中合作...

geek土拨鼠
51分钟前
5
0
【极简】如何在服务器上安装SSL证书?

本文适合任何人了解,图形化操作。下面以腾讯云为例,并且服务器(linux)也安装了宝塔面板。 1.登陆腾讯云账号进入控制台,找到SSL的产品 2.按要求申请并填写表单,记住私钥密码 3.提交后,待...

皇冠小丑
59分钟前
1
0
深入理解编译器

深入理解编译器 原文出处 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 1 Rust中文社区首页 2 Rust中文社区Rust文章栏目 3 知乎专栏Rust语言 编程语言是如何工作的 从内部理解...

krircc
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部