主要看具體業(yè)務(wù)需求,不過更推薦方案一。
首先,字段的冗余并不是一個(gè)多大的缺點(diǎn),另外,用事務(wù)來實(shí)現(xiàn)多表操作也很方便。
而方案一帶來的好處除了查詢效率高,最關(guān)鍵的是支持的業(yè)務(wù)場(chǎng)景更多,雖然現(xiàn)在看,收藏?cái)?shù)好像也不是個(gè)重要字段,但是某天產(chǎn)品突然加需求說,咱們要按收藏?cái)?shù)來個(gè)排序,分頁等各種,這時(shí)候用方案二實(shí)現(xiàn)起來就會(huì)越來越惡心
很有可能是你這幾條數(shù)據(jù)已經(jīng)被刪除了
但是沒有刷新數(shù)據(jù)庫
導(dǎo)致拋出刪除已經(jīng)不存在的數(shù)據(jù)
刷新一下試試
1.你點(diǎn)擊時(shí)跳轉(zhuǎn)時(shí)傳入的參數(shù)是否有問題?
2.建議你可以把這部分代碼貼出來,這樣大家也能更好幫你定位問題所在!
963,1040,1008,1016,992,1010,997,1000,1025,998,971,1036,962,998,972,954,1040,931,953,1018,1054,992,934,983,1027,973,1021,1044,997,1010,1062,978,988,1028,972,986,979,922,1032,924,993,1055,1054,1031,1023,981,1027,1017,1005,1031,1004,1009,994,1004,967,1026,1016,984,1032,987,1053,964,978,983,985,992,948,1061,1068,993,933,1028,967,1010,1007,962,1018,978,1003,1036,1001,1021,1006,1006,1041,1022,971,957,956,1007,1023,952,1011,988,991,984,1020,1025,1003,1018
這個(gè)10000個(gè)數(shù)分100個(gè)表,平均每個(gè)表數(shù)的總個(gè)數(shù),分布的很均勻了好吧。
然后用哈希速度快,也很裝逼有木有^_^
在 sql 下, 方案2更好. 在 mongo 下, 方案1更好.
不知道你的這個(gè)項(xiàng)目中有沒有用戶權(quán)限組的概念.
如果有權(quán)限組的話, 就是一個(gè)權(quán)限組的 collection 里面, 每個(gè)權(quán)限下保存了一個(gè)菜單項(xiàng)的數(shù)組.
如果沒有權(quán)限組的話, 就可以按照你說的方案1, 在每個(gè)用戶表里, 或者單獨(dú)的用戶權(quán)限表里, 保存一個(gè)菜單數(shù)組.
當(dāng)然, 保存菜單項(xiàng)的 id 數(shù)組或許更合適.
mongo 里面數(shù)組也是可以建立索引的, 查詢也很方便.
另外, 也可以參考 mongo 自身的權(quán)限系統(tǒng), 其權(quán)限設(shè)置也是保存在 mongo 數(shù)據(jù)庫內(nèi)的, 通常都是 admin 庫下的 users 表. 如果你的 mongo 開啟了權(quán)限管理, 并且權(quán)限庫名字就叫 admin, 則可以用以下命令查看:
> use admin
switched to db admin
> show users
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
{
"_id" : "admin.migration",
"user" : "migration",
"db" : "admin",
"roles" : [
{
"role" : "backup",
"db" : "admin"
},
{
"role" : "read",
"db" : "local"
},
{
"role" : "read",
"db" : "some_database"
}
]
}
{
"_id" : "admin.sys",
"user" : "sys",
"db" : "admin",
"roles" : [
{
"role" : "__system",
"db" : "admin"
}
]
}
以上輸出為示例. 可以看到官方存儲(chǔ)權(quán)限的方案也是用數(shù)組.
css: 'style!css!autoprefixer'改成css: 'style-loader!css-loader!autoprefixer-loader'這種寫法試試?
我沒有看過直播,但是這個(gè)例子我想應(yīng)該是這樣理解:
最初的代碼里面,很多硬編碼,主要時(shí)那兩段if-else,如果要加入其他按鍵,比如c鍵、d鍵,會(huì)很麻煩
重構(gòu)之后g.keydowns保存所有預(yù)定義的按鍵的狀態(tài),g.actions里面保存按鍵上綁定的函數(shù),然后在下面的setInterval中接收按鍵的狀態(tài),然后調(diào)用綁定的函數(shù),這樣一來,以后要加入新的按鍵和函數(shù)就會(huì)很容易,只要對(duì)外開放一個(gè)注冊(cè)接口,然后在外面注冊(cè)就行了。
這是一個(gè)比較經(jīng)典的重構(gòu)的例子,martin fowler的書里面講過
你給出的示例數(shù)據(jù)不對(duì)吧? 第一個(gè)數(shù)組 qty都是2,第二個(gè)數(shù)組里面qty都是1,怎么能有相等的?
參考實(shí)現(xiàn):
$arr1 = [
['qty' => '2', 'country' => 'ID', 'sku' => 'B00208MM01000', 'id' => '50040019'],
['qty' => '2', 'country' => 'ID', 'sku' => 'B00208MM03000', 'id' => '50040019']
];
$arr2 = [
['qty' => '1', 'country' => 'ID', 'sku' => 'B00208MM01000', 'id' => '1040'],
['qty' => '1', 'country' => 'ID', 'sku' => 'B00208MM02000', 'id' => '1041'],
['qty' => '1', 'country' => 'ID', 'sku' => 'B00208MM03000', 'id' => '1042'],
['qty' => '1', 'country' => 'ID', 'sku' => 'B00208MM01000', 'id' => '1043'],
['qty' => '1', 'country' => 'ID', 'sku' => 'B00208MM02000', 'id' => '1044']
];
$finalArr = [];
foreach ($arr1 as $k => $v) {
foreach ($arr2 as $k2 => $v2) {
if ($v2['qty'] == $v['qty'] && $v2['country'] == $v['country'] && $v2['sku'] == $v['sku']) {
array_push($finalArr, $v2);
}
}
}
print_r($finalArr);
找到了一個(gè)解決方法, 設(shè)置id_card為unique index, 這樣如果有重復(fù)的id_card數(shù)據(jù)插入或者修改就會(huì)拋sql異常~~~ 完美解決了這個(gè)問題
異步請(qǐng)求到的值在 Management created 之后拿到, 所以才會(huì)表現(xiàn)為你說的那樣 console 輸出 0
恭喜你,寫法是正確的,不用懷疑。
你這種直接操作庫的業(yè)務(wù)沒有必要自定義異常,數(shù)據(jù)庫執(zhí)行錯(cuò)誤或異常會(huì)自己拋異常的。
1.首先如果是web請(qǐng)求 則可以簡(jiǎn)單開啟php-fpm的慢查詢?nèi)罩?。分析出那些?qǐng)求耗時(shí)過長。。此方法可以初略的查到問題所在
3.依賴第三方工具?;蛘遬hp自帶的拓展。太多。。自行翻閱官方文檔。
https://docs.mongodb.com/manu...
最后發(fā)現(xiàn)php操作mongodb其實(shí)就是對(duì)mongodb操作的一種映射,可以直接去看mongodb的官方文檔,然后按照規(guī)則傳參
這種情況很少見了,但是驗(yàn)證的方法很簡(jiǎn)單。
你去把自己寫的sql拿出來,然后把沒有插入成功那條記錄帶入,不通過代碼,執(zhí)行一次sql。(其實(shí)就是手動(dòng)插入一條記錄,看這兩個(gè)字段是否有值)
如果有值,那么很可能是你的sql跟實(shí)體類屬性或者跟數(shù)據(jù)庫字段哪個(gè)地方?jīng)]有對(duì)應(yīng)好。
For example, I want to use a loop: when a user enters a name ( skyped, clicker heroes games,..jany..) , he or she will export the corresponding hotmail ( clickerheroes@hotmail.com)
評(píng)論和回答應(yīng)該是分表的。
評(píng)論表應(yīng)該會(huì)有這些字段:
id 自增
content 評(píng)論的內(nèi)容
uid 誰寫的評(píng)論
type 類型,是問題的評(píng)論,還是回答的評(píng)論
qid/answer_id 問題或回答的id,當(dāng)然,也可以把問題評(píng)論和回答的評(píng)論分成不同的表,這樣,type字段就可以不要了。
time 添加時(shí)間
zan 獲得的點(diǎn)贊數(shù)
pid 回復(fù)的對(duì)象,如果沒有則為0
status 狀態(tài),正常,還是被刪除,或者是用戶自己刪除(刪除方式,segmentfault 不一定有區(qū)分)
相關(guān)聯(lián)的表應(yīng)該有:
用戶表,與uid關(guān)聯(lián)
問題表,與qid關(guān)聯(lián)
回答表,與answer_id關(guān)聯(lián)(與qid二選一)
贊同表,每一個(gè)贊同應(yīng)該都是有紀(jì)錄的,所有應(yīng)該有個(gè)獨(dú)立的表,但它們之間的關(guān)系一般是“同時(shí)”,與上面幾個(gè)的“關(guān)聯(lián)”不太一樣。
是我的話,差不多會(huì)這樣設(shè)計(jì)。
inner join本來走一個(gè)關(guān)聯(lián)字段的索引就夠了
你非要讓人家回表再篩選一遍當(dāng)然慢了
要優(yōu)化就結(jié)合業(yè)務(wù),
1、子查詢里面索引選擇是不是最優(yōu)了,比如user_id是不是會(huì)比create_time更快?
2、1表2表使用了out_trade_no關(guān)聯(lián),看字段名應(yīng)該是交易單號(hào)一類的,這種是否還需要在2表進(jìn)行時(shí)間篩選?
3、最后一個(gè)排序加limit是最耗時(shí)的,內(nèi)存排序再過濾掉幾萬數(shù)據(jù)明顯不合理,嘗試其他方式篩選,比如時(shí)間劃分粒度更小一點(diǎn),翻頁功能實(shí)現(xiàn)網(wǎng)上方案很多,多看下,借鑒一下別人的實(shí)現(xiàn)方式
我有一個(gè)想法,不知道是否可行。exchange
的結(jié)構(gòu)不改動(dòng),新建一張表
CREATE TABLE `exchange_statistics` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`volume_statistics` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
其中volume_statistics字段記錄的是通過數(shù)組序列化或者符號(hào)分割后的最新的144個(gè)值,144個(gè)值可以是從小到大或者按時(shí)間整理好,然后每隔5分鐘最前的元素剔除,從后面加入最新的元素。
這樣每個(gè)交易所預(yù)處理好最新的144個(gè)值,獲取交易所列表直接查詢exchange_statistics
即可。
exchange
結(jié)構(gòu)不需要改動(dòng),防止以后業(yè)務(wù)改動(dòng),有涉及統(tǒng)計(jì)的功能。
這種方案不知如何?
id是主鍵,單查id會(huì)用到主鍵唯一索引,而且查1列跟查多列的速度肯定是不一樣的
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(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),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(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庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。