php mysql sqlite缓存_使用sqlite作为数据缓存
在M系統里,使用的數據庫是sql server或者mysql。
整個框架類似于事件驅動,根據當前的硬件信號+數據庫狀態,判斷事件是否滿足觸發條件,有的話,觸發事件執行動作。
這樣的框架,需要對每個事件輪詢,如果大部分事件不滿足觸發條件,會導致優先級低的事件在等待觸發的延時較長。
相當于 判斷條件-》執行-》判斷條件-》執行。
其實在執行的時候,就已經知道了下一步的數據狀態會更改成什么樣子。
最低級的做法,是再創建一個一模一樣的數據庫,作為未來狀態的數據庫,那這樣在執行的時候,就可以先更新未來數據庫,并且同步查詢下一個命中的事件。
兩個數據庫也實在不好維護。
最近在一個項目,嘗試實現了一個內存管理數據的未來狀態,暫且稱為未來內存上下文吧。
前期認為這個未來上下文,還是能滿足的,但受限于自己設計的這個上下文,保存的數據太少,相比于一個未來數據庫的功能,差的太多。
也曾經考慮是否能用redis作為這個上下文,其實也可以,但與原來對于sql server 或者mysql的映射關系,要維護這之間的數據同步,也是不小工作量。
查過互聯網架構的框架,網上對于redis同步關系數據庫的內容也太少了,估計現在都是各家實現各家的,以后應該會有這類型的工具或者代碼出現,但目前沒有。
后來查到了sqlite,這東西跟關系數據庫類型,幾乎可以跟sql server 或者mysql無縫對接,而且占用資源也很少,只要使用sqlite的庫,封裝成C++,再封裝成類似ODBC的接口,因為項目里對于sql server和mysql是用ODBC連接的。
具體做法:
1.每次啟動時,從sql server加載數據,創建一份結構數據同步的sqlite文件,由于需要作為內存上下文的數據量不多,生成sqlite時間大約在1~2s
2.每次事件判斷觸發條件,查詢數據時,都從sqlite中提取,滿足觸發條件后,立刻執行sqlite的更新操作。
3.等待事件執行完畢后,再更新一遍sql server和sqlite,因為有個別數據,需要執行后才可以得到,這部分的確有數據的差異,所以sqlite還要更新一遍,好在差異的地方不多,是可控的。
總結
以上是生活随笔為你收集整理的php mysql sqlite缓存_使用sqlite作为数据缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java输入年月输出日历_java输入年
- 下一篇: 小程序开发提示没有npm路径_百度小程序