亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: fender0107401
打印 上一主題 下一主題

[C++] C++什么時候能有“反射”? [復(fù)制鏈接]

論壇徽章:
36
CU大;照
日期:2013-09-18 15:24:20NBA常規(guī)賽紀(jì)念章
日期:2015-05-04 22:32:03牛市紀(jì)念徽章
日期:2015-07-24 12:48:5515-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-30 09:26:4715-16賽季CBA聯(lián)賽之北控
日期:2016-03-30 11:26:2315-16賽季CBA聯(lián)賽之廣夏
日期:2016-05-20 15:46:5715-16賽季CBA聯(lián)賽之吉林
日期:2016-05-24 11:38:0615-16賽季CBA聯(lián)賽之青島
日期:2016-05-30 13:41:3215-16賽季CBA聯(lián)賽之同曦
日期:2016-06-23 16:41:052015年亞洲杯之巴林
日期:2015-02-03 15:05:04CU大牛徽章
日期:2013-09-18 15:24:52CU十二周年紀(jì)念徽章
日期:2013-10-24 15:46:53
11 [報告]
發(fā)表于 2015-10-21 09:01 |只看該作者
回復(fù) 6# yulihua49


    序列化與反序列化google的protobuf有用過嗎?

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
12 [報告]
發(fā)表于 2015-10-21 12:59 |只看該作者
本帖最后由 yulihua49 于 2015-10-21 13:00 編輯
idi0t 發(fā)表于 2015-10-21 09:01
回復(fù) 6# yulihua49

沒用過。你看我給的文章摘錄,談到了protobuf。

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
13 [報告]
發(fā)表于 2015-10-21 13:02 |只看該作者
本帖最后由 yulihua49 于 2015-10-21 13:40 編輯
windoze 發(fā)表于 2015-10-20 23:21
回復(fù) 9# yulihua49

先不說性能,只討論一下語法。

我們不能用<T>,因為編譯時不知道T。
你看我的一個序列化原型:
/*******************************************************************************
* C struct to json object by SDBC parttention
* choose為空,選擇全部字段。
* choose 可以是選擇的字段名稱列表,用,或|隔開。
* 也可以是字段順號,順號范圍,可以與名字列表混用,如:"0-5,8,11,zip,code"
*******************************************************************************/

JSON_OBJECT stu_to_json(JSON_OBJECT json,void *data,T_PkgType * typ,const char *choose,char *colidx);
一般情況下用下面的宏:
#define struct_to_json(json,data,typ,choose) stu_to_json((json),(data),(typ),(choose),0)

void *data就是一個結(jié)構(gòu)指針,這個函數(shù)內(nèi)部,它不知道是什么結(jié)構(gòu)。
T_PkgType * typ 是模板,它是依據(jù)模板找到里邊的數(shù)據(jù)(名字,類型,長度,格式,位置)。它應(yīng)該是通過反射得到的。由于struct不能反射,所以我有3種辦法得到它。1.自己手寫。2.從數(shù)據(jù)庫的表結(jié)構(gòu)。3.寫元數(shù)據(jù),生成struct和template。有了模板的幫助,這個函數(shù)可以處理任何結(jié)構(gòu)(運行時泛型)。序列化呢?一個json_object_to_json_string(json)就解決了。
看看怎么應(yīng)用:
        ret=DAU_mk(&summary_DAU,dp->SQL_Connect,summary_tabname);//根據(jù)生成模板和數(shù)據(jù)區(qū)。
------
        DAU_fromJSON(dp,rec_json);//從json裝載數(shù)據(jù)到內(nèi)部數(shù)據(jù)區(qū)(結(jié)構(gòu)布局的)
        DAU_copy(&summary_DAU,dp,"");//把dp里的同名列拷貝到DAU。
        ddt_rows=to_summary(&summary_DAU,summary_recs,summary_num,stmt);//處理這個DAU,以后,就有了那個泛型的批量插入處理。

論壇徽章:
44
15-16賽季CBA聯(lián)賽之浙江
日期:2021-10-11 02:03:59程序設(shè)計版塊每日發(fā)帖之星
日期:2016-07-02 06:20:0015-16賽季CBA聯(lián)賽之新疆
日期:2016-04-25 10:55:452016科比退役紀(jì)念章
日期:2016-04-23 00:51:2315-16賽季CBA聯(lián)賽之山東
日期:2016-04-17 12:00:2815-16賽季CBA聯(lián)賽之福建
日期:2016-04-12 15:21:2915-16賽季CBA聯(lián)賽之遼寧
日期:2016-03-24 21:38:2715-16賽季CBA聯(lián)賽之福建
日期:2016-03-18 12:13:4015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-05 00:55:2015-16賽季CBA聯(lián)賽之佛山
日期:2016-02-04 21:11:3615-16賽季CBA聯(lián)賽之天津
日期:2016-11-02 00:33:1215-16賽季CBA聯(lián)賽之浙江
日期:2017-01-13 01:31:49
14 [報告]
發(fā)表于 2015-10-21 13:36 |只看該作者
回復(fù) 13# yulihua49

全動態(tài)的結(jié)構(gòu)這類東西在動態(tài)語言比如Python里很常見,不過我一直不覺得它在實際應(yīng)用中有太廣泛的用途。

我接觸到的絕大多數(shù)情況是類似于json/xml/dbrecord <--> T,其中T是一個具體類型,所以只要有一些針對T的反射手段就滿足要求。

你說的東西更類似于在運行時生成新類型,我腦子里一時想不起有什么地方非用這個東西不可的。

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
15 [報告]
發(fā)表于 2015-10-21 13:42 |只看該作者
本帖最后由 yulihua49 于 2015-10-21 14:55 編輯
windoze 發(fā)表于 2015-10-21 13:36
回復(fù) 13# yulihua49

全動態(tài)的結(jié)構(gòu)這類東西在動態(tài)語言比如Python里很常見,不過我一直不覺得它在實際應(yīng)用 ...

這么多年了,我們一直都在用全動態(tài)的東西,都是在實際的生產(chǎn)項目中使用。
典型的架構(gòu):
客戶端 ---- 應(yīng)用服務(wù)器 ----  數(shù)據(jù)庫。
客戶端提出請求,應(yīng)用服務(wù)器處理這個請求,存取數(shù)據(jù)庫,把結(jié)果反饋給客戶端。
如果不用泛型,針對不同的數(shù)據(jù),類似的業(yè)務(wù),你需要寫很多的服務(wù)。
有了動態(tài)泛型技術(shù),每種業(yè)務(wù)只需一個服務(wù)。進(jìn)一步的,應(yīng)用數(shù)據(jù)結(jié)構(gòu),表結(jié)構(gòu)是會變的。使用動態(tài)泛型,表結(jié)構(gòu)的改變,程序基本不用動。

以我前邊那個貼子為例,那個表有216個列,還計劃增加十幾個列。
一句DAU_fromJSON就解決了,不僅省去了216句的賦值(后邊還要216個綁定呢),還減少了以后修改的麻煩。

這個程序處理了3種數(shù)據(jù)6個表。你至少要寫3個程序,維護(hù)3個程序吧?
你很愿意書寫和維護(hù)這個SQL語句嗎?
OAD_mk_ins sth=65536,INSERT INTO CMS_PROD.CUT_PI_ENTRY (streaming_session_id,data_version,txn_class,txn_revision,txn_ssn_a,txn_ssn_b,ols_txn_type,settlement_date,application_validation_flags,host_name,multipart_txn_count,issuer_abort_reason,acquirer_id,destination_participant_id,account_type,portioned_txn_flag,format_version,txn_date_time,source_participant_id,device_id,sam_id,udsn,service_participant_id,device_location,device_ssn,business_date,transaction_status,cd_set_version,reconciliation_date,ud_type,ud_subtype,device_home_depot,mass_installation_id,iss_exception_proc_abrtd,iss_exception,iss_txn_reflection,cch_flags_txn_portion,cch_flags_txn_summarised,cch_flags_txn_forwarded,cch_flags_txn_apportioned,cch_txn_good_for_summaries,cch_no_further_proc,cch_exception,cch_txn_not_to_issuer,cch_txn_approved,exception_list,card_issuer_id,card_serial_number,card_type,card_life_cycle_count,card_action_sequence_number,route_line_id,route_direction,passenger_type,journey_type,current_location,number_of_passengers,number_of_zones,previous_operator,trip_origin_location,trip_previous_location,lav_sam_id,lav_participant_id,lav_date,lav_txn_value,lav_remaining_rides,lav_ptsn,lav_method_of_payment,data_is_valid,invoice_printed,num_rides,remaining_rides,product_issuer_id,product_serial_number,product_type,product_action_sequence_number,ptsn,application_provider_id,application_serial_number,application_personalise_cat,app_action_sequence_number,application_type,application_passenger_type,key_version,v_start_date_time,v_end_date_time,v_duration,v_distance_origin,v_distance_destination,v_distance_distance,v_journey_period_journeys,v_journey_transfers,v_route_routes,v_location_locations,restrictions_day,restrictions_time,v_period_duration,v_origin,v_destination,pass_end_date_time,lav_pass_expiry_date_time,transaction_value,currency_indicator_fin_details,sales_tax,discount,tax_rate,tax_code,number_of_payments,payment_method,payment_value,partial_transaction_value,partial_sales_tax,purse_remaining_value,lav_remaining_value,lav_amount_paid,invoice_not_printed,start_of_journey,delay_date,delay_station_location,delay_operation_mode,first_use_activation,value_per_ride,total_journey_amount,city_industry_code) VALUES ( :1, :2, :3, :4, :5, :6, :7,TO_DATE(:8,'YYYY/MM/DD'), :9, :10, :11, :12, :13, :14, :15, :16, :17,TO_DATE(:18,'YYYY/MM/DD HH24:MI:SS'), :19, :20, :21, :22, :23, :24, :25,TO_DATE(:26,'YYYY/MM/DD'), :27, :28,TO_DATE(:29,'YYYY/MM/DD'), :30, :31, :32, :33, :34, :35, :36, :37, :38, :39, :40, :41, :42, :43, :44, :45, :46, :47, :48, :49, :50, :51, :52, :53, :54, :55, :56, :57, :58, :59, :60, :61, :62, :63,TO_DATE(:64,'YYYY/MM/DD'), :65, :66, :67, :68, :69, :70, :71, :72, :73, :74, :75, :76, :77, :78, :79, :80, :81, :82, :83, :84,TO_DATE(:85,'YYYY-MM-DD HH24:MI:SS'),TO_DATE(:86,'YYYY-MM-DD HH24:MI:SS'), :87, :88, :89, :90, :91, :92, :93, :94, :95, :96, :97, :98, :99,TO_DATE(:100,'YYYY-MM-DD HH24:MI:SS'),TO_DATE(:101,'YYYY-MM-DD HH24:MI:SS'), :102, :103, :104, :105, :106, :107, :108, :109, :110, :111, :112, :113, :114, :115, :116, :117,TO_DATE(:118,'YYYY/MM/DD'), :119, :120, :121, :122, :123, :124)

還有這個:
2 OAD_mk_ins sth=262144,INSERT INTO CMS_PROD.CUT_PI_FINANCIAL (streaming_session_id,data_version,txn_class,txn_revision,txn_ssn_a,txn_ssn_b,ols_txn_type,settlement_date,application_validation_flags,host_name,multipart_txn_count,issuer_abort_reason,acquirer_id,destination_participant_id,account_type,portioned_txn_flag,format_version,txn_date_time,source_participant_id,device_id,sam_id,udsn,service_participant_id,device_location,device_ssn,business_date,transaction_status,cd_set_version,reconciliation_date,ud_type,ud_subtype,device_home_depot,mass_installation_id,iss_exception_proc_abrtd,iss_exception,iss_txn_reflection,cch_flags_txn_portion,cch_flags_txn_summarised,cch_flags_txn_forwarded,cch_flags_txn_apportioned,cch_txn_good_for_summaries,cch_no_further_proc,cch_exception,cch_txn_not_to_issuer,cch_txn_approved,exception_list,card_issuer_id,card_serial_number,card_type,card_life_cycle_count,card_action_sequence_number,transaction_value,currency_indicator_fin_details,sales_tax,discount,tax_rate,tax_code,number_of_payments,payment_method,payment_value,partial_transaction_value,partial_sales_tax,product_issuer_id,product_serial_number,product_type,product_action_sequence_number,ptsn,invoice_printed,application_provider_id,application_serial_number,application_personalise_cat,app_action_sequence_number,application_type,application_passenger_type,key_version,purse_remaining_value,lav_sam_id,lav_participant_id,lav_date,lav_txn_value,lav_remaining_value,lav_ptsn,lav_amount_paid,lav_method_of_payment,data_is_valid,processed_date,claim_limit_1_date,claim_limit_2_date,claim_limit_1_currency,claim_limit_1_amount,claim_limit_2_currency,claim_limit_2_amount,claim_limit_1_reason_code,claim_limit_2_reason_code,receipt_number,num_rides,remaining_rides,number_of_entries,portion_to_participant_id,portion_value,lav_remaining_rides,v_start_date_time,v_end_date_time,v_duration,v_distance_origin,v_distance_destination,v_distance_distance,v_journey_period_journeys,v_journey_transfers,v_route_routes,v_location_locations,restrictions_day,restrictions_time,v_period_duration,v_origin,v_destination,aimi_tsn,staff_id,machine_id,full_value,product_purchase_type,number_of_passengers,route_line_id,route_direction,passenger_type,journey_type,current_location,number_of_zones,previous_operator,trip_origin_location,trip_previous_location,cardholder_serial_num,cardholder_issuer_id,company_id,classification_level,cardholder_title,cardholder_name,cardholder_phone_day,address_1,address_2,address_3,address_4,address_5,card_refund_method,refund_reason,payment_requestor_id,payment_request_id,pass_end_date_time,lav_pass_expiry_date_time,ticket_serial_number,shift_number,shift_start_time,toras_code,entitlement_id,invoice_not_printed,split_card_issuer_id,split_card_serial_number,split_card_type,split_card_life_cycle_count,split_app_serial_number,split_product_issuer_id,split_product_serial_number,eft_terminal_id,eft_trace_number,eft_authorisation_status,eft_response_advice,eft_merchant,eft_payment_details,eft_card_type,eft_settlement_date,eft_acquirer_id,eft_reversal_flag,value_write_off_amount,deposit_write_off_amount,currency_indicator,reason_code,value_per_ride,reversal_reason_code,via_actionlist,invalid_card_serial_number,invalid_product_issuer,invalid_life_cycle_count,invalid_product_type,invalid_card_issuer_id,invalid_card_type,invalid_app_issuer_id,invalid_app_serial_number,invalid_product_serial_number,reversed_udsn,recredit_reason,entry_time,reversal_reason,adjustment_amount,surcharge_details,lower_ptsn,upper_ptsn,compensation_reason,should_pay_value,encrypt_flag,purse_serialno,terminate_serialno,crc_version,crc_code,integral_startdate,trans_value_before,trans_value_after,discount_params,discount_cardtype,discount_switch,discount_lowpeak,discount_value_sum,integral_start_value,lowpeak_start,lowpeak_end,trans_value_before_adjust,city_industry_code) VALUES ( :1, :2, :3, :4, :5, :6, :7,TO_DATE(:8,'YYYY/MM/DD'), :9, :10, :11, :12, :13, :14, :15, :16, :17,TO_DATE(:18,'YYYY/MM/DD HH24:MI:SS'), :19, :20, :21, :22, :23, :24, :25,TO_DATE(:26,'YYYY/MM/DD'), :27, :28,TO_DATE(:29,'YYYY/MM/DD'), :30, :31, :32, :33, :34, :35, :36, :37, :38, :39, :40, :41, :42, :43, :44, :45, :46, :47, :48, :49, :50, :51, :52, :53, :54, :55, :56, :57, :58, :59, :60, :61, :62, :63, :64, :65, :66, :67, :68, :69, :70, :71, :72, :73, :74, :75, :76, :77, :78,TO_DATE(:79,'YYYY/MM/DD'), :80, :81, :82, :83, :84, :85,TO_DATE(:86,'YYYY/MM/DD'),TO_DATE(:87,'YYYY/MM/DD'),TO_DATE(:88,'YYYY/MM/DD'), :89, :90, :91, :92, :93, :94, :95, :96, :97, :98, :99, :100, :101,TO_DATE(:102,'YYYY-MM-DD HH24:MI:SS'),TO_DATE(:103,'YYYY-MM-DD HH24:MI:SS'), :104, :105, :106, :107, :108, :109, :110, :111, :112, :113, :114, :115, :116, :117, :118, :119, :120, :121, :122, :123, :124, :125, :126, :127, :128, :129, :130, :131, :132, :133, :134, :135, :136, :137, :138, :139, :140, :141, :142, :143, :144, :145, :146, :147,TO_DATE(:148,'YYYY-MM-DD HH24:MI:SS'),TO_DATE(:149,'YYYY-MM-DD HH24:MI:SS'), :150, :151,TO_DATE(:152,'YYYY-MM-DD HH24:MI:SS'), :153, :154, :155, :156, :157, :158, :159, :160, :161, :162, :163, :164, :165, :166, :167, :168, :169,TO_DATE(:170,'YYYY/MM/DD'), :171, :172, :173, :174, :175, :176, :177, :178, :179, :180, :181, :182, :183, :184, :185, :186, :187, :188, :189, :190,TO_DATE(:191,'YYYY/MM/DD HH24:MI:SS'), :192, :193, :194, :195, :196, :197, :198, :199, :200, :201, :202, :203, :204, :205, :206, :207, :208, :209, :210, :211, :212, :213, :214, :215, :216)

還有一個,不寫了。它們表名不同,列大同小異,數(shù)量也不同。
都是一個程序處理的。沒有動態(tài)泛型?你試試。語句的長度還不是最可怕的。前邊的列名與后邊的綁定變量要完全對位。。天哪。。。
我可是沒寫過這些語句,連那些列名都沒完整的讀過。

改變表結(jié)構(gòu),記錄數(shù)組區(qū)的分配,語句和綁定變量,表示器變量,都得改吧?

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
16 [報告]
發(fā)表于 2015-10-21 14:18 |只看該作者
本帖最后由 yulihua49 于 2015-10-21 15:06 編輯
windoze 發(fā)表于 2015-10-21 13:36
回復(fù) 13# yulihua49

全動態(tài)的結(jié)構(gòu)這類東西在動態(tài)語言比如Python里很常見,不過我一直不覺得它在實際應(yīng)用 ...

動態(tài),python是解決了,別的語言也解決了,但是性能,它們有嗎?(毫無性能可言,這功能也就糟蹋了)
C有性能,動態(tài)數(shù)據(jù)解決了嗎?
我要的是魚與熊掌兼得。我得到了。
舉例:我寫的萬能加載程序,可以加載任何表進(jìn)數(shù)據(jù)庫。這肯定是要泛型的。性能超過了ORACLE的sqlldr,它可是公認(rèn)性能最高的。

我的體會,動態(tài)泛型,或者說運行時泛型,最有用了,比起那個STL,感覺就是進(jìn)入了一個全新的天地。
JAVA有很多框架,C/C++為什么沒有那么多?很重要的原因是不能反射。


上邊的兩個表,你要想復(fù)用某些代碼,你先找找二者的相同和不同。。怎么樣,夠眼花的了吧?

讓我動數(shù)據(jù)庫,我是絕對不會去用什么OCI,什么PROC。一律泛型。
你在那邊,覺得動態(tài)泛型沒什么用。
我在這邊,覺得一切離不開動態(tài)泛型。
完全不是一個天地。

樓主為什么提出反射問題?我能理解其中的苦衷。

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
17 [報告]
發(fā)表于 2015-10-21 15:10 |只看該作者
yulihua49 發(fā)表于 2015-10-21 14:18
動態(tài),python是解決了,別的語言也解決了,但是性能,它們有嗎?(毫無性能可言,這功能也就糟蹋了)
C有 ...

show一下生成語句的函數(shù):

  1. int OAD_mk_ins(OAD *oad,char *stmt)
  2. {
  3. int ret=0;
  4. char *p=stmt;
  5. struct bindnod bnode;

  6.         if(oad->sth < 0) {
  7.         char *returning=0;
  8.                 if(*p) { //有 RETURNING 子句
  9.                         returning=strdup(p);
  10.                 }
  11.                 bnode.bindnum=0;
  12.                 bnode.flg=0;
  13.                 bnode.last_bindp=0;
  14.                 bnode.oad=oad;
  15. //制造語句
  16.                 if(oad->srm->befor) {
  17.                         p=stpcpy(p,oad->srm->befor);
  18.                         *p++ = ' ';
  19.                         oad->srm->befor=0;
  20.                 }

  21.                 p=stpcpy(p,"INSERT ");
  22.                 if(oad->srm->hint&&*oad->srm->hint) {
  23.                         p=stpcpy(p,oad->srm->hint);
  24.                         *p++=' ';
  25.                         *p=0;
  26.                 }
  27.                 p=stpcpy(p,"INTO ");
  28.                 if(*oad->SQL_Connect->DBOWN&&!strchr(oad->srm->tabname,'.')) {
  29.                         p=stpcpy(p,oad->SQL_Connect->DBOWN);
  30.                         *p++='.';
  31.                         *p=0;
  32.                 }
  33.                 p=stpcpy(mkset(stpcpy(stpcpy(p,oad->srm->tabname)," ("),oad->srm->tp),") VALUES (");
  34. //生成占位符
  35.                 p=stpcpy(mk_col_bind(p,oad,&bnode),")");
  36.                 if(returning) {
  37.                         char *  p1=p;
  38.                         p=stpcpy(p,returning);
  39.                         free(returning);
  40.                         returning=p1;
  41.                 }
  42.                 set_dbo(stmt,oad->SQL_Connect->DBOWN);
  43.                 if(returning) {
  44.                         ret=pre_bind_array(oad,returning,&bnode);
  45.                         if(ret) {
  46.                                 return ret;
  47.                         }
  48.                         returning=0;
  49.                 }
  50. //分配oad空間
  51.                 if(0!=(ret=OAD_alloc(oad))) {
  52.                         ShowLog(1,"%s malloc cb fail %d !",__FUNCTION__,ret);
  53.                         return MEMERR;
  54.                 }
  55. //prepare
  56.                 oad->sth=sqlo_prepare(oad->SQL_Connect->dbh,stmt);
  57.                 if(oad->sth < 0) {
  58.                         ___SQL_GetError(oad->SQL_Connect);
  59.                         sprintf(stmt+strlen(stmt),",err=%d,%s",
  60.                                 oad->SQL_Connect->Errno,
  61.                                 oad->SQL_Connect->ErrMsg);
  62.                         OAD_free(oad);
  63.                         return(-1);
  64.                 }
  65.                 ShowLog(5,"%s sth=%d,%s",__FUNCTION__,oad->sth,stmt);
  66. //bind
  67.                 BB_Tree_Scan(oad->bind_tree,bind_proc);
  68.         }
  69.         return 0;
  70. }
復(fù)制代碼

論壇徽章:
6
技術(shù)圖書徽章
日期:2013-11-13 11:11:27子鼠
日期:2014-02-20 17:54:13處女座
日期:2014-06-16 17:43:33午馬
日期:2014-08-08 09:11:17未羊
日期:2014-08-10 11:57:072015年辭舊歲徽章
日期:2015-03-03 16:54:15
18 [報告]
發(fā)表于 2015-10-22 09:57 |只看該作者
回復(fù) 15# yulihua49


    key-value型的數(shù)據(jù)庫不是更好處理這樣的需求?

論壇徽章:
15
射手座
日期:2014-11-29 19:22:4915-16賽季CBA聯(lián)賽之青島
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16賽季CBA聯(lián)賽之四川
日期:2017-02-07 21:08:572015年亞冠紀(jì)念徽章
日期:2015-11-06 12:31:58每日論壇發(fā)貼之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-08-04 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-07-12 22:20:002015亞冠之浦和紅鉆
日期:2015-07-08 10:10:132015亞冠之大阪鋼巴
日期:2015-06-29 11:21:122015亞冠之廣州恒大
日期:2015-05-22 21:55:412015年亞洲杯之伊朗
日期:2015-04-10 16:28:25
19 [報告]
發(fā)表于 2015-10-22 10:17 |只看該作者
本帖最后由 yulihua49 于 2015-10-22 11:19 編輯
littledick 發(fā)表于 2015-10-22 09:57
回復(fù) 15# yulihua49

用在哪?是處理kv數(shù)據(jù)庫吧?
用泛型方法處理kv也是非常方便的,已經(jīng)在多個項目中有應(yīng)用。
實際上我的很多模板也是存在kv數(shù)據(jù)庫里的,當(dāng)然是在內(nèi)存,作為數(shù)據(jù)庫buffer使用的。
存儲模板的kv庫:tpl是v,tabname是k

  1. int tpl_to_lib(T_PkgType *tpl,const char *tabname)
  2. {
  3. JSON_OBJECT json;
  4. int ret;

  5.         json=json_object_new_array();
  6.         ret=tpl_to_JSON(tpl,json);

  7.         pthread_rwlock_wrlock(&tpl_lock);
  8.         if(!tpl_lib) tpl_lib=json_object_new_object();
  9.         json_object_object_add(tpl_lib,tabname,json);//k v 入庫
  10.         pthread_rwlock_unlock(&tpl_lock);

  11.         return ret;
  12. }
復(fù)制代碼
第7行,把模板自身序列化成JSON。

一般KV數(shù)據(jù)庫的那個V是簡單變量,也有時是復(fù)雜變量,這時你依然不知道其內(nèi)部結(jié)構(gòu),只能整體的存取。所以這里使用可解析的JSON對象做KV。

樓主的問題,部分可以用這種可解析對象完成,但是性能較低。(例如不能完成數(shù)組綁定)
我們這種SRM模板系統(tǒng),效率非常高。今天又創(chuàng)新高啦:
前邊提到的交易,每秒27000筆啦,網(wǎng)速提到萬兆網(wǎng)的結(jié)果。千兆網(wǎng)是20000筆,百兆網(wǎng)是4000筆?梢钥闯。性能完全依賴外部資源,我自己的開銷非常小。剩下的那一點點時間開銷,基本都是ORACLE的,我這邊幾乎趨近0啦。
數(shù)據(jù)記錄是很大的,數(shù)據(jù)量也很大。任何其他語言,其他接口,都不太可能達(dá)到這個性能。

所以,我這個方案,不僅開發(fā)快,編譯快,運行也非常快。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP