orm数据库关系映射 api
修改记录 2024/8/16 增加APIget_entry_by_limit
分页查询get_entry_by_in
IN 查询
2024/8/17 delete_entry_by_range
范围删除
2024/11/13 热更支持
之前热更存在这个问题。
热更orm_table 注意点 如果一个服务访问了orm_table_m服务,这个服务同时跟orm_table_m一起热更,由于 使用orm的限制 的特性,旧的orm服务不在提供服务,然后旧的访问orm的服务又不能切换访问到新的orm服务。这时旧的服务将访问不了orm服务。
然后就暂时禁用的orm的热更支持。
orm_table_m不支持热更 由于热更orm_table 注意点 的问题,会导致旧服务访问不了orm_table_m服务 ,这很可能不符合业务预期,所以就禁止了orm_table_m 热更,对于orm 的修改,都需要重启更新。
仔细想了一段时间,orm热更还是得支持,不然怎么做到大部分情况下不停服更新。为了让orm能热更就得解决热更orm_table 注意点 这个冲突特性的问题。 办法就是旧的服务能切换访问新的orm服务,至于旧服务访问新访问存在的问题,就只能使用者,自己去把握好,如果想热更的好,尽量不要改动到handle
的参数和返回值,不然旧服务访问新的orm就可能出错。
出错情况演示: orm 服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 local M = {}function M.init () local adapter = ormadapter_mysql:new("admin" ) g_orm_obj = ormtable:new("t_player" ) :int64("player_id" ) :int64("nickname" ) :int8("sex" ) :int8("status" ) :set_keys("player_id" ) :builder(adapter) return g_orm_objend local handle = {}function handle.get_player (player_id) local entry = g_orm_obj:get_one_entry(player_id) return entry:get_entry_data()end M.handle = handlereturn M
test_m 服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 local CMD = {}function CMD.start () skynet.fork(function () orm_table_client:instance("player" ):get_player(100001 ) end ) return true end function CMD.exit () return true end return CMD
修改后
orm 服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 local M = {}function M.init () local adapter = ormadapter_mysql:new("admin" ) g_orm_obj = ormtable:new("t_player" ) :int64("player_id" ) :int64("nickname" ) :int8("sex" ) :int8("status" ) :set_keys("player_id" ) :builder(adapter) return g_orm_objend local handle = {}function handle.get_player (player_id, player_id_2) local entry = g_orm_obj:get_one_entry(player_id) local entry_2 = g_orm_obj:get_one_entry(player_id, player_id_2) return entry:get_entry_data(), entry_2:get_entry_data()end M.handle = handlereturn M
test_m 服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 local CMD = {}function CMD.start () skynet.fork(function () orm_table_client:instance("player" ):get_player(100001 , 100002 ) end ) return true end function CMD.exit () return true end return CMD
热更
此时如果旧的test_m服务调用了新的orm player服务的get_player, get_player指定报错。我觉得需要热更的情况下,更改orm的handle方法的话,就直接新增一个方法吧。
建议 热更情况下,不要修改orm 原来的handle函数,只新增,这样确保不会有问题。