你看下這樣行不行。
把input的value用數(shù)組表示,然后后臺(tái)接收到的所有input在一個(gè)數(shù)組中
$hotels = array();
$arr = $_POST['arr'];
foreach ($arr as $k => $v) {
if($k%3 == 0){
if($v){
if(!$arr[$k+1] || !$arr[$k+2]){
echo json_encode(array(
"code" => -1,
"msg" => "如果填酒店名,就必須填金額,時(shí)間",
));
die;
}
$hotels[] = array(
"name" => $v,
"cost" => $arr[$k+1],
"time" => $arr[$k+2],
);
}else{
$hotels[] = array(0, 0, 0);
}
}
}
echo json_encode(array(
"code" => 0,
"msg" => "success",
));
看場(chǎng)景:
如果不需要實(shí)時(shí)分析,可以用文件形式,固定格式存儲(chǔ),然后進(jìn)行離線分析。
如果不需要所有日志,只需要部分日志,那么可以給一定時(shí)間之前的日志刪掉。
現(xiàn)在一般的做法都是,近期日志存在mongodb這種數(shù)據(jù)庫(kù)中,長(zhǎng)期日志存儲(chǔ)在大數(shù)據(jù)平臺(tái)。
分組第一條線排序再分組,取出的就是分組第一條。調(diào)整排序方式獲取最后一條。應(yīng)該是沒(méi)辦法同時(shí)獲取第一條最后一條
間隙鎖是為了防止幻讀
MySQL InnoDB 鎖——官方文檔
https://segmentfault.com/a/11...
下次記得把原始查詢也發(fā)出來(lái),我們看著更方便些。從執(zhí)行計(jì)劃來(lái)反推,查詢大約是
db.webDevice.find({
lid: {
$in: [
"40CnwyHkVmnA9kbScMLNLneaxuS4Tcj",
"140CnwyHkVmnA9kbScMLNLneaxuS4Tcj"
]
}
}).sort({createTime: -1}).limit(1);
因?yàn)槊兴饕?,這個(gè)查詢獲取數(shù)據(jù)的速度實(shí)際上比較快,你也提到在一段時(shí)間內(nèi)第二次查詢就快了,這是一個(gè)很明顯的特點(diǎn),代表內(nèi)存不足。MongoDB和其他數(shù)據(jù)庫(kù)一樣,都會(huì)使用空閑內(nèi)存緩沖索引和數(shù)據(jù),當(dāng)內(nèi)存不足時(shí)就會(huì)使用LRU算法清理舊數(shù)據(jù)換入新數(shù)據(jù)再繼續(xù)查詢。因?yàn)檫@個(gè)過(guò)程涉及到磁盤數(shù)據(jù)交換,速度會(huì)大大降低。發(fā)生這種情況有一個(gè)特點(diǎn),就是一段時(shí)間內(nèi)第二次執(zhí)行時(shí)速度就快了(因?yàn)閿?shù)據(jù)已經(jīng)在內(nèi)存中)。但是如果過(guò)一段時(shí)間再執(zhí)行,速度又會(huì)變慢(因?yàn)橛直粨Q出內(nèi)存了)。所以你的情況實(shí)際上就是受限于硬件。
既然如此最直接的解決辦法就是:
如果不能從硬件方面解決,有一點(diǎn)可以嘗試就是用CPU換內(nèi)存。做法是盡可能調(diào)小cacheSizeGB
(是的沒(méi)錯(cuò),是調(diào)?。???臻e出來(lái)的內(nèi)存操作系統(tǒng)會(huì)用來(lái)緩沖磁盤數(shù)據(jù),而磁盤數(shù)據(jù)是經(jīng)過(guò)壓縮的,體積更小,因此可以緩沖更多數(shù)據(jù)到內(nèi)存中。但作為交換,在使用這些數(shù)據(jù)時(shí)需要經(jīng)過(guò)CPU再進(jìn)行一次解壓從而額外消耗CPU。即使這樣,效果也比從磁盤讀取要好很多。整個(gè)過(guò)程是自動(dòng)進(jìn)行的,你需要做的只是調(diào)小cacheSizeGB
。
這種做法可以在一定程度上緩解內(nèi)存不足的問(wèn)題,但不是萬(wàn)能的:
基于你的新的疑問(wèn),以下幾點(diǎn)補(bǔ)充:
疑問(wèn)1: 按照你說(shuō)的方式調(diào)小cacheSizeGB,應(yīng)該怎么調(diào)整比較合理
我在上面有提到,這樣做的效果有限,是受制于壓縮率的限制。所以多容納的數(shù)據(jù)實(shí)際就是壓縮的數(shù)據(jù)。比如1G的內(nèi)存能放多少數(shù)據(jù)?
所以調(diào)到多少,其實(shí)要看你想往內(nèi)存里放多少數(shù)據(jù),而這往往是一個(gè)不確定的數(shù)值。這里會(huì)有另外一個(gè)概念叫做工作集(working set),就是你經(jīng)常用到的那些數(shù)據(jù)。比如你的數(shù)據(jù)庫(kù)共有100GB數(shù)據(jù),但是你經(jīng)常用到的部分只有10GB,那么你的內(nèi)存只要能裝下10GB數(shù)據(jù),應(yīng)用在大部分時(shí)候就可以非???,剩下的情況忽略就好了。
基于上面這些分析,你應(yīng)該可以算一下,你的工作集有多大,數(shù)據(jù)壓縮率有多大,那么需要把cacheSizeGB
調(diào)到多小才能容納下工作集(又或者調(diào)到多小都不可能容納下工作集)。你的情況是內(nèi)存不足CPU空閑,所以如果懶得算,直接把cacheSizeGB
調(diào)到最小值就好了。
疑問(wèn)2: config只用了1.5GB內(nèi)存(限制了CacheSizeGB
3GB).可以說(shuō)明索引都加載到了內(nèi)存中嗎?
這說(shuō)明config數(shù)據(jù)庫(kù)(元數(shù)據(jù))的索引和數(shù)據(jù)都加載到內(nèi)存中了。注意數(shù)據(jù)的索引肯定是在shard中,與config無(wú)關(guān)。而且大頭是在shard上面。
順便提一下,如果不是實(shí)驗(yàn)?zāi)康?,根本沒(méi)必要分這么多片。因?yàn)樵谝慌_(tái)機(jī)器上分再多片,硬件資源也只有這么多,對(duì)于性能沒(méi)有什么意義,反而還會(huì)有額外的傳輸開(kāi)銷。
疑問(wèn)3: mongodb remove數(shù)據(jù)后,查詢卻越來(lái)越慢是什么情況?
remove之后跟查詢沒(méi)有本質(zhì)上的聯(lián)系,可能只是湊巧發(fā)生在一起。如果你有足夠的證據(jù)覺(jué)得這兩者確實(shí)有聯(lián)系,請(qǐng)另開(kāi)問(wèn)題描述清楚問(wèn)題的上下文以及你發(fā)現(xiàn)的情況,必要的時(shí)候也可以求助于MongoDB JIRA。如果一定要做一個(gè)無(wú)根據(jù)的猜測(cè),我覺(jué)得可能是remove時(shí)導(dǎo)致熱數(shù)據(jù)被換出內(nèi)存(注意remove也需要先找到滿足條件的數(shù)據(jù)然后才能刪除),引起后面的查詢需要重新從磁盤上加載數(shù)據(jù)造成的。
1.數(shù)據(jù)庫(kù)字段類型約束 選用無(wú)符號(hào)類型
2.程序代碼去約束
3.錄入價(jià)格的時(shí)候效驗(yàn)
其實(shí)這個(gè)問(wèn)題可以看成是數(shù)學(xué)上集合的的問(wèn)題
你的這個(gè)sql:
select * from user where name = 'A' or sex = '1'
可以等價(jià)成下面這個(gè)sql
select * from user where name = 'A' AND sex = 1
UNION ALL
SELECT * FROM user WHERE name = 'A' AND sex != 1
UNION ALL
SELECT * FROM user WHERE name != 'A' AND sex = 1
拆解成三部分,可以自由調(diào)整顯示順序
謝謝。
把SQL貼出來(lái)。
先看看update時(shí)有沒(méi)有deadlock異常,再看下事物,多少條commit一次,再用show processlist等操作看看數(shù)據(jù)庫(kù)執(zhí)行的sql狀況。
select * from t2 LEFT JOIN t1 ON t2. m_top_user_list like '%t1. user_id%'
找到問(wèn)題,每種編程語(yǔ)言都有規(guī)定字長(zhǎng)。jsdouble類型字長(zhǎng)超過(guò)15位之后的數(shù)值都不顯示歸零。
目錄放一張表就行了
id name bookid acticleid pid
一級(jí)目錄pid為0 二級(jí)目錄pid為一級(jí)目錄的id
另外mysql字段類型占用大小
https://dev.mysql.com/doc/ref...
直接看看文檔吧
如果字段都是一樣的話,可以考慮把多個(gè)結(jié)果集用union連起來(lái),然后再排序
我在微信群里也回答你了,先查一下Keepalive。參考這個(gè)Q&A:https://docs.mongodb.com/manu...
點(diǎn)最后一個(gè)按鈕
用
set names utf8
設(shè)置一下編碼試試
--testtable
delimiter //
create trigger insertTrigger before insert on testtable
for each row set new.w = new.a + new.b + new.c + new.d;
//
create trigger updateTrigger before update on testtable
for each row set new.w = new.a + new.b + new.c + new.d;
//
delimiter ;
一般來(lái)說(shuō)就是把前后端解耦,前端一套可以部署到靜態(tài)服務(wù)器獨(dú)立跑,需要數(shù)據(jù)時(shí)再AJAX訪問(wèn)后端提供的相應(yīng)接口拿東西。
你說(shuō)的這種,還是以實(shí)際業(yè)務(wù)需求(產(chǎn)品人員)為準(zhǔn)吧。需求不一樣,做法不一樣。
第一種的bug就是所有消息都標(biāo)記已讀(可能會(huì)出現(xiàn)未看到的消息也標(biāo)記,但性能會(huì)更優(yōu))
第二種,無(wú)第一種bug,但性能會(huì)稍有影響。
決定權(quán)由需求方?jīng)Q定。你是簡(jiǎn)單問(wèn)題復(fù)雜化了。
以上方法不考慮其他方案解決性能問(wèn)題(如nosql等)
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。