水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
首页
|
上页
|
5/5
|
转到
主题:g++16.1已经支持反射了,于是我试了试
40楼
|
ylh1969
|
2026-06-08 23:14:54
|
只看此ID
评价很高了,我确实也压榨不出什么油水了。
在另一个帖子里171楼有批量处理的例子,很有意思的问题,如何在1000个pks主键里找到存在或不存在的数据。
一般要用where (col1,col2,,) in (value,,,,,)查找,语句巨长。
用where col1=:col1 and col2=:col2,,,,,
然后绑定一个1000行主键数组,在Oracle是不可以的。
171楼用了一个绝妙的方法,你看看。
【 在 DoorWay 的大作中提到: 】
: 已经分享到了。感谢!
: 我让AI分析,只能说出我能想到的,挑出我(大概)懂的,贴在上面,难免挂一漏万。
: 实际系统中,肯定还有很多这样的细节。AI遇强则强,如果更懂行的人问,肯定还能挖出更多精彩的东西。
: ...................
--
FROM 221.221.54.*
41楼
|
ylh1969
|
2026-06-09 09:45:25
|
只看此ID
如果需要的struct不是数据库里的呢?有meta文件方式,可以生成模板和struct。好处是,能够处理比c更多的数据类型。
例如,交通系统最常用的时间类型,准儒略历,就是以一个时间原点,指定时刻与原点的时间差,不同粒度的整数,如日,分钟,秒,微秒。Oracle用的原点是1899.12.31.0分0秒000000微秒,这个原点的好处是,1900.1.1是星期一,date%7就是星期,周日0。
铁路地铁都需要运行图计算,一个站的time+区间运行时间就是下一站的time,运行图非常好计算。
还有开行日期,有的周五周一开,有的隔日开,有的一天兰州一天西宁的开,中欧班列也是周几去哪,需要计算交路。那么,准儒略历就是最方便的。但是,看不懂,所以,需要看的时候要转成可懂的。这就是模板格式器的作用,meta支持模板格式器,生成的struct成员是整数,有格式器说它是时间型。模板系统包含时间格式器,但只能做Oracle的格式,其他数据库,不打算做各种的,采用把Oracle格式转换为它的格式,像Sybase,特复杂,也给转了,在生成语句时。
时间格式器挺繁琐的,可以让AI干。但是要注意分层,上层的众多功能都是同一套底层功能的堆砌,如何分层分模块是你的事,具体工作可以AI干。这些模块也可以脱离模板单独使用。
还有银行,两个时间之间经历多少次利率变化,每种利率持续多少天。
【 在 DoorWay 的大作中提到: 】
: 已经分享到了。感谢!
: 我让AI分析,只能说出我能想到的,挑出我(大概)懂的,贴在上面,难免挂一漏万。
: 实际系统中,肯定还有很多这样的细节。AI遇强则强,如果更懂行的人问,肯定还能挖出更多精彩的东西。
: ...................
--
修改:ylh1969 FROM 221.221.54.*
FROM 221.221.54.*
42楼
|
ylh1969
|
2026-06-11 09:50:04
|
只看此ID
https://mp.weixin.qq.com/s?chksm=9b7ef6c1ac097fd7bedef6ffbce6266fb42c1c8e9a2c299eca598fc1d259dc56cb87d54f5676&exptype=unsubscribed_card_recommend_article_u2i_mainprocess_coarse_sort_tlfeeds&ranksessionid=1781141501_7&req_id=1781142356742047&mid=2247483859&sn=486d752b6ef249eaf6d7c59a27cf7dd3&idx=1&__biz=MzAwNzMzMjQ3Nw%3D%3D&scene=169&subscene=200&sessionid=1781141500&flutter_pos=30&clicktime=1781142443&enterid=1781142443&finder_biz_enter_id=5&jumppath=20020
_1781142339609%2C50094_1781142354804%2C20020_1781142372082%2C50094_1781142430661&jumppathdepth=4&ascene=56&fasttmpl_type=0&fasttmpl_fullversion=8296540-zh_CN-zip&fasttmpl_flag=0&realreporttime=1781142443739&devicetype=android-34&version=280048a6&nettype=WIFI&abtest_cookie=AAACAA%3D%3D&lang=zh_CN&session_us=gh_fe33b9b12ff0&countrycode=CN&exportkey=n_ChQIAhIQKqZUd8IjxqsOwvvcQWmmhBLwAQIE97dBBAEAAAAAALGCGp04ookAAAAOpnltbLcz9gKNyK89dVj0OWmAhxLVyvHJ%2FY%2FH1wd%2Fyt3u4umzLWVEkrRU2coIe5crQiKxXWZvO55c5U1sfPVupB6in1zReefht7%2FPPFlqoaf7G0j1SVcKsSHtB5e%2BnIdsGK00smMCZg4ATCC36TMwP4zUZ6STOL%2FzE3sDuqLCs9ZMvm%2Fzx9TZaYeBZiAWw5XuTozbNcmH3UXVfl%2BIwx9EUx9bKMXJxyXvfoAKanBFFpw8y7602dwGzAciJT4opRzhqf73D7Y4uoyppZJ%2BJpl9vNOMrNKEYWbsWQ%3D%3D&pass_ticket=CXulZ93J9ET%2BkVAb%2B8xIvIO5qMN8GuPLxp0eHXYdjhSLTyW1VPesKFUldeWr%2Ftfs&wx_header=3
【 在 ylh1969 的大作中提到: 】
: 评价很高了,我确实也压榨不出什么油水了。
: 在另一个帖子里171楼有批量处理的例子,很有意思的问题,如何在1000个pks主键里找到存在或不存在的数据。
: 一般要用where (col1,col2,,) in (value,,,,,)查找,语句巨长。
: ...................
--
修改:ylh1969 FROM 221.221.54.*
FROM 221.221.54.*
43楼
|
ylh1969
|
2026-06-15 15:45:00
|
只看此ID
还有一个提高效率的方法,与泛型无关。
数据库连接句柄打开开销较大,一般需要30~40ms,如果在功能模块里开,性能降低一半不止。如果常开,在多线程服务器环境不合适。
所以采用了数据库连接池,虽然很多数据库提供了内建的连接池,那与我无关。
连接池在开始时是一个连接也不开。第一个使用者取用时打开一个连接,用完归还时,如果是正常归还,不关闭,就加到空闲队列头。下一次有人用就优先取已经打开的。因数据库致命故障归还的,就关闭,回收资源,放到队尾。
一个定时器线程定时扫描连接池健康度,有超过一定时间(一般是5分钟)不用的连接就关闭之。
这是一种极为可靠的连接池健康保障法。
一般的策略是保活,这很难的,你怎么发个信息并得到应答从而确定其活不活?如果那边太忙无暇顾及你,是否会误判?你想检查的连接正在被别人使用怎么办?
我的策略是保死,只检查空闲队列,没人用就弄死,不要老占着资源。有的数据库是按连接数付费的,没事别占着茅坑不拉屎,现用现开,最健康。保活的话,检查一次空闲队列需要很长时间,不知道需要多长时间才能得到一个应答,保死的只看时间戳,检查的非常快,锁队列的时间非常短。
实践中这个方法简单而可靠。数据库崩溃,服务器不必restart,等着数据库恢复即可,这叫自愈式连接池。
连接池技术完美的解决了当年的 长连接与短连接之争。
【 在 DoorWay 的大作中提到: 】
: 高效的三个维度
: 对底层内存与驱动的“零抽象”
: ===
: ...................
--
修改:ylh1969 FROM 221.221.54.*
FROM 221.221.54.*
首页
|
上页
|
5/5
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版