簡單的答案:不行
內存對數(shù)據庫的作用是不可忽略的,但是你似乎夸大了它的作用。這樣考慮:
假設你有100w條數(shù)據,需要從中按一定的條件來count。如果沒有索引,你需要進行100w次比較,看其中有哪些是滿足條件的數(shù)據,然后計數(shù)。為了進行這個比較,首先要把數(shù)據從磁盤上撈出來吧,擴大內存確實對這方面有幫助,但是然后呢?比較100w條數(shù)據是不是要消耗很多時間?CPU是不是也會漲很高?這就是O(n)的時間復雜度。
如果能完整命中索引,這個過程將大大簡化,因為對數(shù)據的搜索可以想象為折半查找,其復雜度為O(log2(n))。兩者的時間消耗大概是這樣(橫坐標數(shù)據量,縱坐標時間):
https://i.stack.imgur.com/7eh...
簡單地說,在同樣的硬件條件下:
import MySQLdb as mdb
import sys
conn = mdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test')
cur = conn.cursor()
cur.execute("insert into contact values('key1', 'value1')")
cur.execute("select * from test")
row_num = int(cur.rowcount)
for i in range(row_num):
row = cur.fetchone()
print row
#在數(shù)據操作完成之后,進行commit,完成數(shù)據庫的數(shù)據更新
conn.commit()
cur = conn.cursor()
conn.close()
代碼重復的部分多,那么關鍵就是找出不重復的地方是什么,然后把重復的地方先弄成一塊,再按照不同的條件細分。
比如,你這上面的語句有很多按照$_sortType來判定排序的,自然你可以先用一個參數(shù)來存儲最基本的查詢語句;
$basic = DB::table('shop_goods')
->where('goods_cid',$_path)
->where('goods_status',1) // 0未審核 1審核通過 2審核未通過
->where('goods_state',0) // 0已上架 1已下架
->where('goods_recycle',0) // 0正常 1回收站
然后再根據$_sortType進行條件判斷:
if($_sortType=="composite" || $_sortType==""){ //綜合 或 沒有
$data = $basic
->skip($page)
->take(4)
->get();
}else if($_sortType=="price_up"){ //價格最低
$data = $basic
->orderBy('goods_price','asc') // 價格最低
->skip($page)
->take(4)
->get();
}else if($_sortType=="price_down"){ //價格最高
$data = $basic
->orderBy('goods_price','desc') // 價格最高
->skip($page)
->take(4)
->get();
}else if($_sortType=="assess_down"){ // 評價最多
$data = DB::table('shop_goods')
->leftJoin('shop_assess', 'shop_goods.goods_id', '=', 'shop_assess.assess_gcode')
->selectRaw('shop_goods.*,COUNT(shop_assess.assess_id) as assess_num')
->where('shop_goods.goods_cid',$_path)
->where('shop_goods.goods_status',1) // 0未審核 1審核通過 2審核未通過
->where('shop_goods.goods_state',0) // 0已上架 1已下架
->where('shop_goods.goods_recycle',0) // 0正常 1回收站
->groupBy('shop_goods.goods_id')
->orderBy('assess_num','desc')
->get();
}else if($_sortType=="publish_new"){ //最新發(fā)布
$data = $basic
->orderBy('goods_time','desc') // 最新發(fā)布
->skip($page)
->take(4)
->get();
}
大概的思路就是這樣。
先composer update
做一個數(shù)據接口,然后通過js渲染嘍!不過本身這個東東就是來整靜態(tài)的,你再整一個服務器給寫數(shù)據接口,就有點浪費,劃不來
我也遇到了同樣的問題 樓主解決了的話 麻煩告知下 謝謝
Content.find()
為空時進行判斷,為空的話,應該是需要單獨 resolve 空數(shù)組SELECT UserId ,FROM_UNIXTIME(Begin ,'%Y-%m') as month, sum(Duration) as time
FROM tb
GROUP BY UserId,FROM_UNIXTIME(Begin ,'%Y-%m')
django確實不支持database links,可以試試其他方式:https://code.djangoproject.co...
這種一般都是用緩存完成的,每次都查性能太差了
1):放入在Redis中
2):放入ServletContext域
問題已經解決了。
為了禁止body滑動,
在安卓時添加下面代碼,IOS不添加
$(".modal").on("touchmove", function (e) {
e.preventDefault();
});
/^(\d+\.{1})/
如果你的 mongo 安裝時將 bin 目錄加入了環(huán)境變量, 可以用 whereis mongodump
來找到這條命令在哪.
如果沒有加入環(huán)境變量, 可以用 ps -ef | grep mongo
命令查看你的 mongo 是如何被啟動的.
如果你的 mongo 是手敲命令啟動的, 那么上面這條命令就可以顯示出你的啟動命令, 你也就找到了 mongo 的 bin 目錄.
如果你的 mongo 是用諸如 systemd 等方式啟動的, 那你可能還需要進一步查看 mongo 的啟動腳本, 比如 vim /etc/init.d/mongo
, 來找到其 bin 目錄.
如果上述命令只有一條輸出, 即, 只輸出了 ps -ef | grep mongo
, 說明你的 mongo 根本沒有啟動, 也就不用再費勁去找如何用 mongodump 命令備份數(shù)據了.
重要疑問: mongodump 命令只需要知道端口號和授權信息就可以了, 也可以用 mongo 的連接 url, 你為什么一定要找到它的 bin 目錄呢. 看上面截圖你都有系統(tǒng)的 root 賬號了, 難道還不知道 mongo 端口號和賬號密碼嗎.
where:{
$and: [
status: '0',
sushequ: ctx.request.body.class,
sequelize.where(
sequelize.fn('DATE', sequelize.col('created_at')), // 表對應的字段
sequelize.literal('CURRENT_DATE')
)
]
}
你看看 mysql 架構,存儲引擎在最底層,actor_id<5 存儲引擎就 using index(actor_id)了,但是引擎使用的索引不能過濾所有無效行(<>這個條件不能發(fā)送給存儲引擎),所以獲得數(shù)據返回給mysql服務層,這一層using where 解析 <> 1 。
mysql5.6之后的ICP特性,可以把檢查條件比如<>發(fā)送給存儲引擎層,不符合條件的數(shù)據不讀取。
upsert跟insert
比,肯定是insert
要好一些。因為upsert
要先find
是否存在,然后才insert
,這是有額外開銷的。但是理論上不會有本質的區(qū)別,因為B樹的時間復雜度是O(log2(N))
——消耗時間不會隨數(shù)據量增長有明顯的增長:
但是如果upsert
的條件不能命中索引,那時間復雜度就是O(N),同樣在上圖中可以看到45度那條線,這就是時間跟數(shù)據量成正比了。
所以結論是:
upsert
的條件能夠命中索引,理論上跟insert
的差異不會太大,也不會隨著數(shù)據量增長有明顯的變化趨勢;upsert
的條件不能命中索引,花的時間就會隨數(shù)據量成正比增長。理論歸理論,工程上你還得保證內在足夠容納索引,否則與磁盤交換將極大地減慢索引搜索的速度。交換得越多,性能越差,這就會破壞O(log2(N))
的曲線了
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構,發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯(lián)網管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網頁制作和網頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。