关于Java中Map数据存储的思考

jing31 发布于 2010/07/27 14:16
阅读 3K+
收藏 2

好像是一种比较典型的问题,当我们想通过Map来做缓存的时候,怎样来实现存储。

我们借助省市的数据来探讨这个问题。

假设数据如下:

表名:province(省)

code name

001 广东

002 四川

 

表名:city(城市)

code name

00101 广州

00102 深圳

00103 珠海

00201 成都

00202 自贡

 

典型的取得方式有下面几种:

1)取得所有省份列表

2)取得所有城市列表

3)取得指定省份下的城市列表

4)取得指定省份的信息

5)取得指定城市的信息

结构思考:

 

1:取得出来的数据结构肯定是要有序的,首先考虑linkedHashMap,用两个linkedHashMap各自存储省份数据和城市数据,

但是因为无法用linkedHashMap无法查找key中满足指定条件的value,所以无法实现3的要求,想实现貌似只能通过遍历来做?

其他的可以满足。

2:考虑数据嵌套存储,也就是把城市的数据当成省份数据的一个子属性进行存储,但是这样无法满足2的要求,或者说无法高效的满足这种要求。只能遍历省份,从中取得所有子属性,进行合并,然后输出。

 

大家在做这样的东西的时候有没有什么好的经验,来探讨一下吧。

加载中
1
polly
polly

用两个Map吧,一个存省份,以及所有城市的key;

一个存城市的key-value

0
jing31
jing31

跟我的想法差不多,我是这样做的:

linkedHashMap来实现省份和城市两种基本数据的存储。

用HashMap来保存省份与城市关系数据。

可以满足我上面提到的所有要求。

还有其他的方案吗、

0
polly
polly

算法上我也二把刀,感觉这样已经很不错了。你的linkedHashMap相当于数据表的索引,hashmap基本数据相当于数据表。

 

其他或许你可以借鉴一些内存数据库,至于他们的算法,没有研究过,不好乱说。

 

内存数据库(in-memory database,IMDB)是指那些完全用主存作为数据存储的数据库管理系统,由于节省下来磁盘的I/O开销,与基于磁盘的传统数据库管理系统而言效率要高很多。

内存数据库非常适合在

  • 小规模数据应用
  • 快速原型系统实现
  • 软件测试

等场景中应用。还清晰记得记得当时我们在一个项目中即想利用数据库的查询优化、但是数据量又小到足以被内存容纳的情况下,满街找DB2中类似的开关……

现在有不少比较成熟基于Java的内存数据库,使用起来跟连接一个jar没什么区别。下面介绍我使用过的一些开源免费的产品。

HSQLDB
HSQLDB是一个开源免费的纯Java数据库,与ANSI-92 SQL兼容得不错,速度非常快,而且同时支持嵌入式和C/S模式。1.8.0.10整个jar包仅仅700K,使用起来跟普通jar包没有不同。如果没有弄错的话,HSQLDB还被OpenOffice采用。期待1.9.0早日来到。主页:http://hsqldb.org/

H2 
个人觉得H2是HSQLDB的一个重写。非常快(感觉比HSQLDB更快)、开源免费、提供JDBC和ODBC接口,同时支持嵌入式、C/S模式以及阵列模式,仅仅占用1M左右的内存。此外,H2还很贴心地提供了一个很小的基于Applet的SQL工具。在我的使用过程中,感觉H2与HSQLDB一样对SQL 92支持得很不错。主页:http://www.h2database.com/

Apache Derby

源自IBM的数据库,与HSQLDB和H2想比,主要感觉速度慢,而且对SQL 92的兼容性不佳,个别被MySQL支持的语句都无法顺利在Derby上执行。还有些bug,虽然在升级包中修复了。虽然如此,Derby被捐献到Apache基金后,相信会有更大的作为吧。主页:http://db.apache.org/derby/

随着时间的推移,相信内存数据库会更成熟、有更广阔的应用空间。

 

0
jing31
jing31

多些楼上的,我来看看这些东西~第一次见呢~

0
l
lanyang4223

可以Map里面放Map啊

返回顶部
顶部