返回信息流其中一个文件格式如下:
ip 时间点 url
表示 ip 在 时间点 发送了一个 url 请求。
另一个文件格式如下:
ip 起始时间 结束时间 mac地址
表示 mac地址 在时间段 [ 起始时间,结束时间 ] 内使用 ip 。
现在希望根据文件2的信息,把文件1中的ip替换成对应的mac地址(因为一个ip在不同时间可能被分配给不同的网卡)。
数据量足够大并且一直在增长。每个字段都可以看成是定长的。
现在有两个想法:
一个想法是每个ip有一个独立文件,文件内记录(起始时间,结束时间,mac地址)这样的格式。对于文件1内的每条记录,先根据ip找到对应的文件,然后再在文件中对时间二分查找。增加记录的时候直接append就行了。
另一个就是使用数据库,使用(ip,起始时间,结束时间)作为主键。但是查找的时候ms没有对时间进行二分查找那么方便,插入的时候对索引的更新也比较耗时间吧。对数据库表的设计不是很了解……
请教大家上面两个方法哪个好些?或者还有什么好的方法么,谢谢。
这是一条镜像帖。来源:北邮人论坛 / soft-design / #40981同步于 2011/8/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]问个索引设计的问题
Xer
2011/8/9镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
谢谢bd……数据库大牛也会在这边出没吧,这边人气比数据库的好
【 在 zxsword (小绝) 的大作中提到: 】
: 不懂帮顶。。。话说论坛有@功能的话,@数据库大牛
方案一: 由于文件1是按时间顺序写入的,根据文件2的内容动态维护IP->MAC地址在当前时间点上映射。扫描一遍文件1就好了
方案二: 将文件2以:IP, TIME, EVENT, MAC的格式存,用EVENT区分是开始时间还是结束时间,查询时SELECT EVENT WHERE TIME > a.time LIMIT 2 ORDER BY TIME
再问一下方案2建表的问题……是(1)直接使用(ip, time)作为主键还是(2)使用ip作为主键,然后对每个ip新建一个表用于保存(time, ...)这些信息比较好呢?
【 在 zzcc (Binux <足兆叉虫>) 的大作中提到: 】
: 方案一: 由于文件1是按时间顺序写入的,根据文件2的内容动态维护IP->MAC地址在当前时间点上映射。扫描一遍文件1就好了
: 方案二: 将文件2以:IP, TIME, EVENT, MAC的格式存,用EVENT区分是开始时间还是结束时间,查询时SELECT EVENT WHERE TIME > a.time LIMIT 2 ORDER BY TIME
如果用(2)这么建得建多少个表啊
【 在 Xer 的大作中提到: 】
: 再问一下方案2建表的问题……是(1)直接使用(ip, time)作为主键还是(2)使用ip作为主键,然后对每个ip新建一个表用于保存(time, ...)这些信息比较好呢?
: 【 在 zzcc (Binux <足兆叉虫>) 的大作中提到: 】
: : 方案一: 由于文件1是按时间顺序写入的,根据文件2的内容动态维护IP->MAC地址在当前时间点上映射。扫描一遍文件1就好了
: ...................
我觉得你可以换个思路,可以试试NoSQL来维护IP,MAC的KV映射
【 在 Xer (小x) 的大作中提到: 】
: 再问一下方案2建表的问题……是(1)直接使用(ip, time)作为主键还是(2)使用ip作为主键,然后对每个ip新建一个表用于保存(time, ...)这些信息比较好呢?
有好的推荐没……
我现在用leveldb,但是功能太简单了,像(ip,time)这种多个字段组合的key不知道怎样存储(难道都转成字符串一个接一个?)
【 在 ox (小贝) 的大作中提到: 】
: 我觉得你可以换个思路,可以试试NoSQL来维护IP,MAC的KV映射
哦……我只是担心如果都放一起的话不知道查询速度怎样,因为ip的数量不会太多,而对于每个ip,时间段(begin, end)会比较多一些,url请求也很多,所以希望对每个url请求,查找到当时的ip对应的mac越快越好(从目前的样例数据来看是这样)
【 在 zzcc (Binux <足兆叉虫>) 的大作中提到: 】
: 如果用(2)这么建得建多少个表啊