当前位置: 技术问答>linux和unix
共享内存控制问题(如果确实可行,送500分,绝不食言!!!)
来源: 互联网 发布时间:2015-03-05
本文导语: 我现在有这样一个问题,由于工作需要,必须将数据库里表的数据取出来放入共享内存中,供其他进程使用。在组织共享内存数据时,一时想不出好的办法。因为表的数据是会更新的(添加,删除),导致共享内存也...
我现在有这样一个问题,由于工作需要,必须将数据库里表的数据取出来放入共享内存中,供其他进程使用。在组织共享内存数据时,一时想不出好的办法。因为表的数据是会更新的(添加,删除),导致共享内存也会更新。
我原先有一个设计,都已经实现了,不过已经被自己现在拍死了,那就是为每张表建一个结构,然后定义一个大的结构,放每个表的数据,然后将这个大结构放入共享内存中。这样的坏处是不方便。如下:
表A
struct A
{
Field1[10];
Field2[20];
}
表B
struct B
{
Field1[10];
Field2[20];
}
内存结构
struct Mem
{
A s_A[100];//假设A表里有50行数据
A s_B[200];//假设B表里有100行数据
}
然后将这个Mem结构放入共享内存,感觉不是很灵活,所以请各位高手帮助!
谢谢!
我原先有一个设计,都已经实现了,不过已经被自己现在拍死了,那就是为每张表建一个结构,然后定义一个大的结构,放每个表的数据,然后将这个大结构放入共享内存中。这样的坏处是不方便。如下:
表A
struct A
{
Field1[10];
Field2[20];
}
表B
struct B
{
Field1[10];
Field2[20];
}
内存结构
struct Mem
{
A s_A[100];//假设A表里有50行数据
A s_B[200];//假设B表里有100行数据
}
然后将这个Mem结构放入共享内存,感觉不是很灵活,所以请各位高手帮助!
谢谢!
|
我觉得对于时常需要更新的配置数据,在共享内存中使用链表的形式存储比较方便,特别在删除的时候,明显比数组方便.
apache开放源码有一个apr_ring.h提供了对环形链表操作的接口函数(宏),还是比较方便的,就是有点复杂:)
具体源码你可以到apche网站http://www.apache.org/ 去download.当然也可以自己写一个.
apache开放源码有一个apr_ring.h提供了对环形链表操作的接口函数(宏),还是比较方便的,就是有点复杂:)
具体源码你可以到apche网站http://www.apache.org/ 去download.当然也可以自己写一个.
|
你的意思是共享内存的大小也要动态的跟随表内记录的多少来改变,这样恐怕不好实现。
而且你更改共享内存的大小是要耗费资源的,如果表频繁的改动,那么这个效率就难说了。
共享内存我一直都是在申请时定好大小;使用连表在操作时更方便快捷,
我觉得这里最关键的问题是,表的记录会不会超过共享内存的size,但是又不能可劲得往大了去申请,那样就是巨大的浪费了。
而且你更改共享内存的大小是要耗费资源的,如果表频繁的改动,那么这个效率就难说了。
共享内存我一直都是在申请时定好大小;使用连表在操作时更方便快捷,
我觉得这里最关键的问题是,表的记录会不会超过共享内存的size,但是又不能可劲得往大了去申请,那样就是巨大的浪费了。