鍍金池/ 問答/ 數據庫問答
真難過 回答

首先作為畢設 , 我感覺這個表設計本身沒啥硬傷 .
其次是 , 百度云是用的mongodb , 一次mongodb的分享會上聽過百度云的人分享過一些技術 .

凝雅 回答

可以進行分批處理,寫一個batch的處理方法就行了,每次處理一部分數據,比如1w,這樣的話,不會隨著數據量的增大導致gc,最多只是處理時間變長而已

孤影 回答
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

判斷是否存在實際文件夾和文件
然后再將所有的http請求交給index.php
通過index.php進行轉發(fā) 實現url重寫 可以參考下一般的框架實現

情皺 回答
  1. 你最后幾個and查詢,“最小下單次數、最大下單次數、下單總金額”,如果你的需求真的是這樣的話,那么可以考慮在cs_member里加幾個字段進行存儲,數據變化的時候,再更新這幾個字段,這樣,查詢速度會快不少
  2. 查一下表關聯字段的索引,是否建立了,如果沒有的話,建立相關的索引
  3. 查詢字段“下單總數量、付款訂單數量、付款訂單總金額、最后下單時間”,不要在這里查詢,等待需要的指定條數的數據查出后,再遍歷查詢,這樣也會快很多。
離魂曲 回答

1.首先報錯無效數字的話,確定了是字段格式不匹配,對于sql語句比我這個還復雜的,也是照樣,講語句分解開來

2.分解開后,去查詢出數據,首先關注關聯查詢的字段,其次重點去關注number類型的,再去找varchar類型的(varchar類型的需要關注是否超出了長度)

3.查詢出數據,定位到錯誤的數據,再看后期是改數據還是添加過濾或者改表了

--有個笨辦法,可以借用二分查找法來定位,如10個字段,先注釋后面5個字段,看是否報錯,如不是,再注釋前5個字段,排查后5個字段,以此類推,定位到某個字段,記住這個報錯,下次再碰到的時候,一眼就可以定位,如定位不了,那就再看二眼

了解一下

撥弦 回答

addEventListener可以多次綁定并不會覆蓋上一個事件啊,是否是其他地方影響到了?
像這種事件監(jiān)聽我的做法是在根組件監(jiān)聽然后用$on $emit分發(fā)事件
根組件監(jiān)聽并分發(fā)

window.addEventListener('popstate', () => {
  this.$root.$emit('popstate')
})

各級子組件的任意位置監(jiān)聽

this.$root.$on('popstate', () => {

})
貓館 回答

excel使用這個phpexcel

至于數據就需要分片寫入excel文件,一次寫入1000條或者2000條啊,一次數據太多,會導致內存溢出導致錯誤,每一1000位一個文件,最后在合并文件就可以了,一次寫入50000條,這種做法是不支持的(除非你服務器很好)

扯不斷 回答

你的想法是可以的,但是沒有擴展性,若以后需要新增新的產品不屬于課程,你查找訂單的時候需要連的表就多了,建表的時候最好考慮三范式,除非業(yè)務需求快速查詢,不然最好是不要在表中添加多余的字段

浪婳 回答

請查閱Mysql的數據類型

維他命 回答

刪除前是否要先查詢一次,這個個人覺得應視業(yè)務而定。正常情況是沒有這個必要,刪除通常按主鍵刪除,性能不是問題,但如果刪除的數據部分字段有緩存的話,應該先查一下,主要是為了方便清理緩存。舉個栗子:假如要刪除一個用戶,用戶的手機號存在于緩存中(比如已注冊手機號集合),此時直接刪除數據的話,緩存里的手機號就不會被移除,導致后來的人再也不能用這個手機號注冊,所以應先查詢,再刪除,查詢只是為了處理附加業(yè)務。

我只是從業(yè)務角度來講的,與性能無關。

墨小白 回答

如果你不在意數據的話直接刪除數據
1 停止MySQL
2 刪除 MySQL的數據 /var/lib/mysql
3 修改該 lower_case_table_names = 1
4 啟動 mysql
4 搞定

若相惜 回答

你這個問題太大了,硬件方面,我就不多說了,比如memcache及redis等NOSQL數據庫,對內存要求都比較高,redis如果使用ssd的硬盤肯定比sas盤好多了。關于你說的網絡延遲和抵用應用程序:我這里拿redis舉例了:
當用戶連接到Redis通過TCP/IP連接或Unix域連接,千兆網絡的典型延遲可能達到200us,而Unix域socket可能低到30us,當然這個跟你的硬件網卡有關系的,而且redis的屬于典型的C/S架構,調用Redis時,通常是以發(fā)送-應答-再發(fā)送-再應答的模式進行的,而每一次發(fā)送與應答,都需要數據從客戶端到服務端飛一次,當需要使用Redis處理多個命令時,這樣時間都消耗到網絡延遲上可能就不劃算了,當然也可以對redis進行優(yōu)化緩解網絡延遲問題,所有的不管是關系型數據庫還是nosql數據庫肯定都與調用該數據庫的程序有關系,比如大批量的查,大批量的寫等這些操作都會對數據庫帶來壓力。畢竟數據庫是這個服務的瓶頸,這個目前好的辦法是在數據庫前加緩存,對數據庫實現讀寫分離,同時拆庫優(yōu)化。這里我只描述redis,其他的nosql數據庫不太了解,不敢亂說。

柒槿年 回答

你為什么 把 phpmyadmin 和 wp 放在同一個目錄?

sudo lnmp vhost del

刪除你的域名

sudo lnmp vhost add

然后重新添加就行

或者修改你的 domain.conf 里面的 root 為你 wp 的目錄,完了重啟下 nginx

涼汐 回答

問題原因是使用事務時,缺少 rollback 或 commit,使用以下代碼可穩(wěn)定復現這個錯誤:

let mysql = require("mysql");

function createConn() {
    return mysql.createConnection({
        host     : '192.168.1.100',
        user     : 'yangqiang',
        password : '123456',
        database : 'node_mysql_demo'
    });
}

function transactionWithoutCommit(conn) {
    conn.beginTransaction(function (err) {
        if (err) {
            throw err;
        }
        conn.query('SELECT * from user where name="jonny"', function (error, results, fields) {
            if (error) {
                return conn.rollback(function () {
                    throw error;
                })
            } else {
                // 缺少 commit,引發(fā)錯誤
            }
        });
    });
}

function transactionWithCommit(conn) {
    conn.beginTransaction(function (err) {
        if (err) {
            throw err;
        }
        conn.query('SELECT * from user where name="jonny"', function (error, results, fields) {
            if (error) {
                return conn.rollback(function () {
                    throw error;
                })
            } else {
                conn.commit(function (err) {
                    if (err) {
                        return conn.rollback(function(){ throw err;})
                    } else {
                        console.log('transaction committed');
                    }
                });
            }
        });
    });
}

function write(conn) {
    conn.query('INSERT INTO user (name) VALUES ("Mei");', function (error, results, fields) {
        if (error) throw error;
        console.log(JSON.stringify(results));
    });
}


var connection = createConn();
connection.connect();

transactionWithoutCommit(connection); // 引發(fā)錯誤
// transactionWithCommit(connection); // 正確的方法
write(connection);
半心人 回答
select A,B,C where A=B;
select A,B,C where A=B and A=C;
痞性 回答

thinkphp中有數據庫字段緩存的,tp3的話在runtime下面的Data下的_fields中,tp的話你用命令清除下字段緩存或者刪除了緩存文件就好了

熊出沒 回答

我的理解這算是數據分析的需求了,OLAP的需求依賴一條數據庫查詢直接產出結果不是很容易,如果是SQL可能會考慮存儲過程,MongoDB可選的方法有Map/Reduce和Aggregation,優(yōu)先選擇后者。性能問題在這里先不討論,先看看是否能達到你想要的效果。第二種數據結構應該沒有問題,第一種結構我的解決方案如下:

db.test.aggregate([
    {$project: {brands: "$brands", brands2: "$brands"}},
    {$unwind: "$brands"},
    {$unwind: "$brands2"},
    {$project: {pair: ["$brands", "$brands2"]}},
    {$group: {_id: "$pair", count: {$sum: 1}}}
]);

這種方式先復制一個brands出來,然后做$unwind相當于brands集合自己與自己排列,而你需要的是組合。比如你的示例數據:

{"brands" : [ "西門子", "ABB", "GE" ]}

出來的結果是:

{ "_id" : [ "GE", "GE" ], "count" : 1 }
{ "_id" : [ "GE", "ABB" ], "count" : 1 }
{ "_id" : [ "GE", "西門子" ], "count" : 1 }
{ "_id" : [ "ABB", "ABB" ], "count" : 1 }
{ "_id" : [ "ABB", "西門子" ], "count" : 1 }
{ "_id" : [ "ABB", "GE" ], "count" : 1 }
{ "_id" : [ "西門子", "GE" ], "count" : 1 }
{ "_id" : [ "西門子", "ABB" ], "count" : 1 }
{ "_id" : [ "西門子", "西門子" ], "count" : 1 }

有些額外的數據,比如[ "ABB", "ABB" ],[ "西門子", "ABB" ]/[ "ABB", "西門子" ]。我暫時還沒想到很好的辦法直接在aggregation pipeline中直接過濾掉這些數據,不過應該不影響你使用。如果有想到更徹底的辦法我再回來補充。

補充回答

求助了一下場外觀眾,aggregation確實很強大。你可能需要查一下:$map, $reduce, $let, $range這些操作符的用法

db.test.aggregate({
    $project: {
        tuples: {
            $reduce: {
                initialValue: [],
                input: {
                    $range: [0, {
                        $subtract: [{
                            $size: "$brands"
                        }, 1]
                    }]
                },
                in: {
                    $let: {
                        vars: {
                            i1: "$$this"
                        },
                        in: {
                            $concatArrays: ["$$value", {
                                $map: {
                                    input: {
                                        $range: [{
                                            $add: [1, "$$i1"]
                                        }, {
                                            $size: "$brands"
                                        }]
                                    },
                                    in: [{
                                        $arrayElemAt: ["$brands", "$$i1"]
                                    }, {
                                        $arrayElemAt: ["$brands", "$$this"]
                                    }]
                                }
                            }]
                        }
                    }
                }
            }
        }
    }
}, {
    $unwind: "$tuples"
}, {
    $sortByCount: {
        $setUnion: "$tuples"
    }
})

這個管道操作本質上的意義就是:

for(var i = 0; i < array.length - 1; i++)
  for(var j = i + 1; j < array.length - 1; j++) {...}

執(zhí)行結果:

{ "_id" : [ "GE", "西門子" ], "count" : 1 }
{ "_id" : [ "ABB", "GE" ], "count" : 1 }
{ "_id" : [ "ABB", "西門子" ], "count" : 1 }