- 论坛徽章:
- 1
|
钢筋混凝土的UNIX C编程技巧(一、内存映射表)[原创]
楼上很多朋友提到“内存映射表”的更新操作 需要 同时更新数据库表和内存表
我给出更新操作的回调函数,供大家批正,同样以“公共系统参数表”为例
- int UpdateCSZFromGGXTCSWhereCSXHProc( void *pvCondValue , void *pvUpdateValue , struct ggxtcs *pstGgxtcs )
- {
- char *pcCSXH = (char *)pvCondValue ;
-
- ClearRight( pstGgxtcs->;csxh );
-
- if( STRCMP( pcCSXH , == , pstGgxtcs->;csxh ) )
- {
- strcpy( dacCSXH , (char *)pvCondValue );
- strcpy( dacCSZ , (char *)pvUpdateValue );
-
- EXEC SQL
- UPDATE ggxtcs
- SET csz=:dacCSZ
- WHERE csxh=:dacCSXH ;
- if( sqlca.sqlcode )
- {
- EXEC SQL COMMIT;
-
- return 2;
- }
- else
- {
- EXEC SQL COMMIT;
-
- strcpy( pstGgxtcs->;csz , dacCSZ );
-
- return 0;
- }
- }
- else
- return 1;
- }
复制代码
再次强调,该更新操作只适用于简单非并发的更新操作,不希望楼下的再在更新的加锁问题上议论。复杂、并发的更新操作当然需要加锁,这是大家都知道的。
我写这篇的前提是:把某些记录比较少、查询、更新操作相对简单、操作非并发的数据库表放入共享内存来实现查询、更新,请大家不要把问题复杂化,我们不是在设计数据库系统。
谢谢广大同仁积极参与讨论,很多朋友提出的见解都能使我的设计更好的优化(比如,使用hash表代替结构数组),在此感谢楼上朋友们的精彩发言。
让我们分享自己的经验和技巧,共同成长,壮大中国unix程序员社群 ^___^ |
|