鍍金池/ 問答/ 數(shù)據(jù)庫問答
巴扎嘿 回答

oracle日期類型可以直接加減,沒有add_days這個函數(shù),如:

select sysdate - 1 from dual;

返回結(jié)果是昨天的當(dāng)前時間點(diǎn)

扯不斷 回答

檢查防火墻設(shè)置。

巫婆 回答

一般像django和java的hibernate有些相似,它并不會走捷徑。而在真實(shí)情況下自己寫sql,就可以簡化sql。而是查詢他需要把對象轉(zhuǎn)sql,返回在把sql轉(zhuǎn)對象,其實(shí)就跟電腦一樣,它是一個好學(xué)生,但是它并不聰明,只是你教會它怎么做,它會重復(fù)做你教它的事,你沒教它就不會。
順便放兩組,查看執(zhí)行sql的方法,多讀讀官方的文檔,它會告訴你為什么的

print Province.objects.all().query
from core.models import Province
from django.db import connection
p = Province(name=u'河南', code='0371')
p.save()
老梗 回答
我用數(shù)據(jù)庫查詢工具,db.linkbase.find({"spider_name":"test_spider"})大約耗時122秒

是122秒還是122ms?122秒的話相當(dāng)慢了。
如果不確定是不是MongoDB方的問題,可以先用profiler看一下執(zhí)行的查詢到底花了多少時間。從你上面的信息來看,我比較傾向于不是數(shù)據(jù)庫這一端慢。

朽鹿 回答

經(jīng)驗上講,我會覺得直接find({"city":"北京市"})可能還更快,不妨自己比較一下。
這里使用多線程會使復(fù)雜度大增,而實(shí)際帶來的價值很有限甚至反作用,如果你對多線程的掌握還不夠爐火純青的話。

旖襯 回答

你只是想返回一個結(jié)果,但使用 throw 一般是拋出異常。
很多時候返回 status 為0,其實(shí)并不是異常。
我覺得這些時候使用 throw 是不合適的。
所謂的異常,應(yīng)該是“它本來應(yīng)該是這樣的,但結(jié)果卻不是”,才需要拋出異常。
比如你要處理一張圖片,傳的參數(shù)指向的文件存在,文件后綴也存在,但讀取數(shù)據(jù)后卻不能正確處理,這時拋個異常是可以理解的,但我個人覺得這還不夠好。

因為我就遇到過,使用 thinkPHP 3.2 的圖片處理類,遇到不能處理的圖片,直接拋出了異常,但其實(shí)對我來說,如果處理圖片有問題 ,是可以直接跳過去的。

也就是說:只有“這一步如果出錯,后面的代碼執(zhí)行就完全沒有意義或者完全不能執(zhí)行”的時候才去拋出異常,否則只需要返回結(jié)果,給使用者(可能是控制器)去處理就好了。

對于樓主的需求,ThinkPHP 是有內(nèi)置的方法的,比如控制器中有 success() 和 error() 兩種方法來滿足樓主的需要,當(dāng)然,我個人比較喜歡 ThinkPHP 3.2的處理方式,比如簡潔,ThinkPHP 5中的這兩個方法添加了不必要的參數(shù),寫起來倒挺麻煩的。
但這兩個方法只在控制器中有,模型中默認(rèn)是沒有的,當(dāng)然,如果你喜歡的話,也可以加到模型中去。
但我個人同樣不太推薦。處理返回結(jié)果或頁面跳轉(zhuǎn)的任務(wù)還是交給控制器會比較好。

模型中,其實(shí)可以自己定義個類似的方法,比如:

function succ($data="",$status=1){
      return array(
       'status'=>$status,
       'info'=>$data,
    );
}

function error($msg=""){
  return succ($msg,0);
}

你在模型中直接 return succ($data);或 return error($msg);即可。

控制器中根據(jù)返回的數(shù)組,再使用$this->success()或$this->error();當(dāng)然,如果你在使用ThinkPHP 5,也像我一樣比較喜歡 ThinkPHP 3.2 的風(fēng)格,這兩個方法你是可以改成3.2的風(fēng)格的。

說回樓主和你看到的大神的代碼,基本思想都差不多,只不過你直接返回一個數(shù)組,而“大神”卻直接拋出異常,我不喜歡這位大神的風(fēng)格。
但你和“大神”都喜歡寫重復(fù)的 "status'=>1,"msg"=>......,我則比較喜歡把它裝進(jìn)函數(shù)或方法中,畢竟這兩個操作是使用非常頻繁的。

關(guān)于代碼中較多 if/else 的情況,我一般使用兩種方法解決:

  1. 短的判斷可以用三目運(yùn)算符代替;
  2. 很多時候 if 時使用了return ,后面就可以不寫 else 了 。

補(bǔ)充:

概括一下:

  1. 模型中建議使用 return ,而不是拋出異常,return 的數(shù)據(jù)可以自己封裝個函數(shù)或方法;(當(dāng)然,要結(jié)合業(yè)務(wù)的具體需求!)
  2. 拋出異常意味著程序的終止,在非必須的情況下不要這樣做;
  3. 控制器中直接使用 success 和 error 或 ajaxReturn 方法即可。

但如果把樓主看到的“大神”的代碼從模型中移到控制器的話,應(yīng)該是合理的(除了重復(fù)的代碼有點(diǎn)多外)。
我個人是不太喜歡使用 throw,但我查看了一下 ThinkPHP 5 和 ThinkPHP 3.2 的源碼,其中的 success和 error 方法除了使用參數(shù)復(fù)雜性不同外,還有一點(diǎn)區(qū)別就是 3.2直接使用 exit()結(jié)束程序,而 5.0 版本中使用的是 throw 一個異常類。

應(yīng)該有理由相信,使用 throw 可能會比如說 exit 更好。
于是,我找到一種說法:

PHP調(diào)用exit退出腳本執(zhí)行不會導(dǎo)致PHP服務(wù)退出。
https://segmentfault.com/q/10...

我不了解底層的機(jī)制,但我覺得這種說法是比較可信的。

拼未來 回答

ALTER TABLE num ENGINE=MYISAM

嘟尛嘴 回答

1、你的數(shù)據(jù)是什么量級,是MB,GB,PB?
2、你數(shù)據(jù)爬下來的存儲方式,是存在文件里還是還是存放到數(shù)據(jù)庫
3、你準(zhǔn)備以什么方式把數(shù)據(jù)開放給對方,提供web api,還是提供ftp,還是提供數(shù)據(jù)庫訪問權(quán)限
你思考過這些問題,自然就知道該怎么做和該去研究哪些資料了

黑與白 回答

mongodb是動態(tài)scheme,無所謂改表結(jié)構(gòu)。
es是全文檢索,也不需要改表結(jié)構(gòu)

懶豬 回答
create table tablename (
…… 
    `create_time` timestamp not null default current_timestamp comment '創(chuàng)建時間',
…… 
)

以前遇到過同樣的情況
如果你的sql創(chuàng)表格式?jīng)]錯的話,
你entity類里面不要寫createtime和updatetime屬性,因為一旦傳參進(jìn)去,就會更新為null

/0718中午更新
必須取到兩個時間的值并且實(shí)現(xiàn)update自動的更新的話修改如下(已測試通過)
在entity類上加注解@EntityListeners(AuditingEntityListener.class)
在兩個屬性上分別加注解
@CreatedDate @LastModifiedDate
在你的啟動類**application上加注解@EnableJpaAuditing
--測試一下save和更新

exists

指定一個子查詢,檢測行的存在。遍歷循環(huán)外表,然后看外表中的記錄有沒有和內(nèi)表的數(shù)據(jù)一樣的。匹配上就將結(jié)果放入結(jié)果集中。具體sql語句如下:

SELECT
    `user`.*
FROM
    `user`
WHERE
    EXISTS (
        SELECT
            `order`.user_id
        FROM
            `order`
        WHERE
            `user`.id = `order`.user_id
    )

使用exists關(guān)鍵字進(jìn)行查詢的時候,首先,我們先查詢的不是子查詢的內(nèi)容,而是查我們的主查詢的表,也就是說,我們先執(zhí)行的sql語句是:

SELECT `user`.* FROM `user` 

然后,根據(jù)表的每一條記錄,執(zhí)行以下語句,依次去判斷where后面的條件是否成立:

EXISTS (
        SELECT
            `order`.user_id
        FROM
            `order`
        WHERE
            `user`.id = `order`.user_id
    )

如果成立則返回true不成立則返回false。如果返回的是true的話,則該行結(jié)果保留,如果返回的是false的話,則刪除該行,最后將得到的結(jié)果返回。也可以和IN對比來分辯認(rèn)識它們
Sql語句中IN和exists的區(qū)別及應(yīng)用

凹凸曼 回答
  1. 使用MySQL中間件分表 (可以按月分表) (不是比較好的解決方案)
  2. 建議使用分布式數(shù)據(jù)庫 例如TiDB 或者阿里云的商用分布式數(shù)據(jù)庫
懷中人 回答
SELECT a.*,b.* FROM a INNER JOIN b ON b.ID = a.ID
司令 回答

試試媒體查詢,或者flex布局,或者bootstrap的網(wǎng)格系統(tǒng),等等。。。。

旖襯 回答

在ORACLE里字段名或者表名可以以下劃線開頭,但必須用雙引號括起來;話說盡量不要以下劃線開頭啊,有點(diǎn)奇葩。

范例:

SQL> create table t1(_col1 number,_col2 number);

create table t1(_col1 number,_col2 number)

ORA-00911: 無效字符

SQL> create table t1("_col1" number,"_col2" number);

Table created

撿肥皂 回答

1G內(nèi)存裝MySQl,就服你