程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 通過緩存數據庫結果提高PHP性能(3)

通過緩存數據庫結果提高PHP性能(3)

編輯:關於PHP編程

將表添加到現有注冊
  前一部分介紹了如何使用更改通知服務使數據庫在注冊對象(在以上示例中為 ORDERS
表)發生更改時發出通知。但從性能角度而言,客戶端應用程序可能更希望緩存 ORDER_ITEMS 表而非 ORDERS
表本身的查詢結果集,這是因為它在每次訪問訂單時,不得不從 ORDERS 表中只檢索一行,但同時必須從 ORDER_ITEMS
表中檢索多個行。在實際情況中,訂單可能包含數十個甚至數百個訂單項。
  由於您已經對 ORDERS 表注冊了查詢,因此不必再創建一個注冊來注冊對
ORDER_ITEMS 表的查詢了。相反,您可以使用現有注冊。為此,您首先需要檢索現有注冊的 ID。可以執行以下查詢來完成此工作

SELECT regid, table_name FROM user_change_notification_regs;
  結果可能如下所示:
REGID TABLE_NAME 
----- --------------
241 OE.ORDERS
  獲取注冊 ID 後,可以使用 DBMS_CHANGE_NOTIFICATION.ENABLE_REG
函數將一個新對象添加到該注冊,如下所示:
DECLARE 
ord_id NUMBER;
BEGIN
DBMS_CHANGE_NOTIFICATION.ENABLE_REG(241);
SELECT order_id INTO ord_id FROM order_items WHERE ROWNUM < 2;
DBMS_CHANGE_NOTIFICATION.REG_END;
END;
/
  完成了!從現在開始,數據庫將生成一個通知來響應對 ORDERS 和 ORDER_ITEMS 所做的任何更改,並調用
orders_nf_callback 過程來處理通知。因此,下一步就是編輯 orders_nf_callback,以便它可以處理因對 ORDER_ITEMS
表執行 DML 操作而生成的通知。但在重新創建 orders_nf_callback 過程之前,您需要創建以下將在更新過程中引用的表類型:
CREATE TYPE rdesc_tab AS TABLE OF SYS.CHNF$_RDESC;
  然後,返回清單
2,在以下代碼行之後:
IF (tblname = 'OE.ORDERS') THEN 
FOR j IN 1..numrows LOOP
row_id := ntfnds.table_desc_array(i).row_desc_array(j).row_id;
SELECT order_id INTO ord_id FROM orders WHERE rowid = row_id;
sendNotification(url, tblname, ord_id);
END LOOP;
END IF;
  插入以下代碼:
IF (tblname = 'OE.ORDER_ITEMS') THEN 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved