A. 資料庫中的一個欄位的數據大小不定如何設置欄位的長度查詢最快又節省空間
varchar是可變字元,varchar(2000)即可,不會浪費空間。
樓主為何要將歷史記錄存在access中呢?若您後台有sql server支持,建議您歷史記錄也存放在sql中,access的性能及對sql的語言支持都遠不如 MSSQL。
【VARCHAR限制了字元串的長度不能超過255個字元?】---哦,忘記了,這個可能access有此限制,sql可以的,最大varchar(8000)。
varchar(100)中的100並不多餘,在未存儲數據時用於佔位,系統會用於預先計劃分配空間,但直到真正存儲數據時才確實分配存儲空間。
個人看法:
1.佔用空間上varchar(100)和varchar(2000)沒什麼區別。
2.但varchar(100)會效率較低,因為按你說的該欄位會5-2000,若大於100,則您每次固定寫入100會需要多次寫操作,眾所周知寫操作是比較耗時的。
3.查詢性能方面,跟您這兒怎麼存沒太大關系,重要的還是常見的資料庫查詢優化,如索引、條件等等
對這個問題,我引用一下CSDN上的說法:
一。數據行結構
char(n): 系統分配n個位元組給此欄位,不管欄位實際長度(後邊用空格補齊)
varchar(n): 假設表中有M個varchar(或者nvarchar)類型的欄位
先分配兩個位元組(用來表示M)
再分配2*M個位元組(表示各變長行的偏移)
此後欄位值有多長,就分配多長
二。varchar(n)一定比char(n)節省空間么?
不一定。
我見過這樣的設計: varchar(3)
就算此欄位為空,也還是比char(3)多用一個位元組。
還有這樣的設計: user_ip varchar(16).
對於這種數據長度變化不大的欄位,用varchar只能浪費空間
結論: varchar適用於數據值長度不太短,且長度變化較大的欄位
三。char(n)一定比varchar(n)速度快么?
不一定
計算varchar的偏移是會花去一些cpu時間,但性能瓶頸不在此,在io.
db的io單位是數據頁(8192位元組)(一頁存有多個數據行,數據行不能跨頁。當然image,text等例外). 因此一頁中行越多,性能越好
另外,關於char和varchar的性能比較,
請參見該實驗:
http://www.yuanma.org/data/2006/0730/article_1266.htm
再補充一下:
[轉帖]char、nchar、varchar、nvarchar,對比那個好?
資料庫定義到char類型的欄位時,不知道大家是否會猶豫一下,到底選char、nchar、varchar、nvarchar、
text、ntext中哪一種呢?結果很可能是兩種,一種是節儉人士的選擇:最好是用定長的,感覺比變長能省些空
間,而且處理起來會快些,無法定長只好選用定長,並且將長度設置盡可能地小;另一種是則是覺得無所謂,
盡量用可變類型的,長度盡量放大些。
鑒於現在硬體像蘿卜一樣便宜的大好形勢,糾纏這樣的小問題實在是沒多大意義,不過如果不弄清它,
總覺得對不起勞累過度的CPU和硬碟。
下面開始了(以下說明只針對SqlServer有效):
1、當使用非unicode時慎用以下這種查詢:
select f from t where f = N'xx'
原因:無法利用到索引,因為資料庫會將f先轉換到unicode再和N'xx'比較
2、char 和相同長度的varchar處理速度差不多(後面還有說明)
3、varchar的長度不會影響處理速度!!!(看後面解釋)
4、索引中列總長度最多支持總為900位元組,所以長度大於900的varchar、char和大於450的nvarchar,nchar
將無法創建索引
5、text、ntext上是無法創建索引的
6、O/R Mapping中對應實體的屬性類型一般是以string居多,用char[]的非常少,所以如果按mapping的
合理性來說,可變長度的類型更加吻合
7、一般基礎資料表中的name在實際查詢中基本上全部是使用like '%xx%'這種方式,而這種方式是無法利用
索引的,所以如果對於此種欄位,索引建了也白建
8、其它一些像remark的欄位則是根本不需要查詢的,所以不需要索引
9、varchar的存放和string是一樣原理的,即length {block}這種方式,所以varchar的長度和它實際佔用
空間是無關的
10、對於固定長度的欄位,是需要額外空間來存放NULL標識的,所以如果一個char欄位中出現非常多的NULL,
那麼很不幸,你的佔用空間比沒有NULL的大(但這個大並不是大太多,因為NULL標識是用bit存放的,
可是如果你一行中只有你一個NULL需要標識,那麼你就白白浪費1byte空間了,罪過罪過!),這時候,
你可以使用特殊標識來存放,如:'NV'
11、同上,所以對於這種NULL查詢,索引是無法生效的,假如你使用了NULL標識替代的話,那麼恭喜你,
你可以利用到索引了
12、char和varchar的比較成本是一樣的,現在關鍵就看它們的索引查找的成本了,因為查找策略都一樣,
因此應該比較誰佔用空間小。在存放相同數量的字元情況下,如果數量小,那麼char佔用長度是小於varchar
的,但如果數量稍大,則varchar完全可能小於char,而且要看實際填充數值的充實度,比如說varchar(3)
和char(3),那麼理論上應該是char快了,但如果是char(10)和varchar(10),充實度只有30%的情況下,
理論上就應該是varchar快了。因為varchar需要額外空間存放塊長度,所以只要length(1-fillfactor)
大於這個存放空間(好像是2位元組),那麼它就會比相同長度的char快了。
13、nvarchar比varchar要慢上一些,而且對於非unicode字元它會佔用雙倍的空間,那麼這么一種類型
推出來是為什麼呢?對,就是為了國際化,對於unicode類型的數據,排序規則對它們是不起作用的,
而非unicode字元在處理不同語言的數據時,必須指定排序規則才能正常工作,所以n類型就這么一點好處。
總結陳詞:
1、如果數據量非常大,又能100%確定長度且保存只是ansi字元,那麼char
2、能確定長度又不一定是ansi字元或者,那麼用nchar;
3、不確定長度,要查詢且希望利用索引的話,用nvarchar類型吧,將它們設到400;
4、不查詢的話沒什麼好說的,用nvarchar(4000)
5、性格豪爽的可以只用3和4,偶爾用用1,畢竟這是一種額外說明,等於告訴別人說,我一定需要長度
為X位的數據
B. 把一個boot項目放進pigx項目中怎麼獲取數據(boot後端數據)
我也遇到過這個問題,我的現象是參數被截斷,只剩下字元串最後大約十分之一的長度。
我也設置了max-request-size,沒起作用,或許是springboot的bug。
後來換了另一種傳輸方式
後台controller用@RequestBody接收參數,前台ajax用contentType: "application/json; charset=utf-8"發送參數。
只有form形式的ajax參數才會被tomcat解析並截斷,換用json形式就繞過了
C. pigx框架值得購買么
pigx框架值得購買。
程序框架理解為基礎或者機械標准件(例如螺絲螺母這些有明確標準的機械部件)更為貼切。
一個框架是一個可復用的設計構件,它規定了應用的體系結構,闡明了整個設計、協作構件之間的依賴關系、責任分配和控制流程,表現為一組抽象類以及其實例之間協作的方法,它為構件復用提供了上下文(Context)關系。因此構件庫的大規模重用也需要框架。
D. 如何成為一個數據分析師需要具備哪些技能
接下來我們分別從每一個部分講講具體應該學什麼、怎麼學。
數據獲取:公開數據、Python爬蟲
如果接觸的只是企業資料庫里的數據,不需要要獲取外部數據的,這個部分可以忽略。
外部數據的獲取方式主要有以下兩種。
第一種是獲取外部的公開數據集,一些科研機構、企業、政府會開放一些數據,你需要到特定的網站去下載這些數據。這些數據集通常比較完善、質量相對較高。
另一種獲取外部數據費的方式就是爬蟲。
比如你可以通過爬蟲獲取招聘網站某一職位的招聘信息,爬取租房網站上某城市的租房信息,爬取豆瓣評分評分最高的電影列表,獲取知乎點贊排行、網易雲音樂評論排行列表。基於互聯網爬取的數據,你可以對某個行業、某種人群進行分析。
在爬蟲之前你需要先了解一些 Python 的基礎知識:元素(列表、字典、元組等)、變數、循環、函數(鏈接的菜鳥教程非常好)……以及如何用成熟的 Python 庫(urllib、BeautifulSoup、requests、scrapy)實現網頁爬蟲。如果是初學,建議從 urllib 和 BeautifulSoup 開始。(PS:後續的數據分析也需要 Python 的知識,以後遇到的問題也可以在這個教程查看)
網上的爬蟲教程不要太多,爬蟲上手推薦豆瓣的網頁爬取,一方面是網頁結構比較簡單,二是豆瓣對爬蟲相對比較友好。
掌握基礎的爬蟲之後,你還需要一些高級技巧,比如正則表達式、模擬用戶登錄、使用代理、設置爬取頻率、使用cookie信息等等,來應對不同網站的反爬蟲限制。
除此之外,常用的的電商網站、問答網站、點評網站、二手交易網站、婚戀網站、招聘網站的數據,都是很好的練手方式。這些網站可以獲得很有分析意義的數據,最關鍵的是,有很多成熟的代碼,可以參考。
數據存取:SQL語言
你可能有一個疑惑,為什麼沒有講到Excel。在應對萬以內的數據的時候,Excel對於一般的分析沒有問題,一旦數據量大,就會力不從心,資料庫就能夠很好地解決這個問題。而且大多數的企業,都會以SQL的形式來存儲數據,如果你是一個分析師,也需要懂得SQL的操作,能夠查詢、提取數據。
SQL作為最經典的資料庫工具,為海量數據的存儲與管理提供可能,並且使數據的提取的效率大大提升。你需要掌握以下技能:
提取特定情況下的數據:企業資料庫里的數據一定是大而繁復的,你需要提取你需要的那一部分。比如你可以根據你的需要提取2018年所有的銷售數據、提取今年銷量最大的50件商品的數據、提取上海、廣東地區用戶的消費數據……,SQL可以通過簡單的命令幫你完成這些工作。
資料庫的增、刪、查、改:這些是資料庫最基本的操作,但只要用簡單的命令就能夠實現,所以你只需要記住命令就好。
數據的分組聚合、如何建立多個表之間的聯系:這個部分是SQL的進階操作,多個表之間的關聯,在你處理多維度、多個數據集的時候非常有用,這也讓你可以去處理更復雜的數據。
數據預處理:Python(pandas)
很多時候我們拿到的數據是不幹凈的,數據的重復、缺失、異常值等等,這時候就需要進行數據的清洗,把這些影響分析的數據處理好,才能獲得更加精確地分析結果。
比如空氣質量的數據,其中有很多天的數據由於設備的原因是沒有監測到的,有一些數據是記錄重復的,還有一些數據是設備故障時監測無效的。比如用戶行為數據,有很多無效的操作對分析沒有意義,就需要進行刪除。
那麼我們需要用相應的方法去處理,比如殘缺數據,我們是直接去掉這條數據,還是用臨近的值去補全,這些都是需要考慮的問題。
對於數據預處理,學會 pandas 的用法,應對一般的數據清洗就完全沒問題了。需要掌握的知識點如下:
選擇:數據訪問(標簽、特定值、布爾索引等)
缺失值處理:對缺失數據行進行刪除或填充
重復值處理:重復值的判斷與刪除
空格和異常值處理:清楚不必要的空格和極端、異常數據
相關操作:描述性統計、Apply、直方圖等
合並:符合各種邏輯關系的合並操作
分組:數據劃分、分別執行函數、數據重組
Reshaping:快速生成數據透視表
概率論及統計學知識
數據整體分布是怎樣的?什麼是總體和樣本?中位數、眾數、均值、方差等基本的統計量如何應用?如果有時間維度的話隨著時間的變化是怎樣的?如何在不同的場景中做假設檢驗?數據分析方法大多源於統計學的概念,所以統計學的知識也是必不可少的。需要掌握的知識點如下:
基本統計量:均值、中位數、眾數、百分位數、極值等
其他描述性統計量:偏度、方差、標准差、顯著性等
其他統計知識:總體和樣本、參數和統計量、ErrorBar
概率分布與假設檢驗:各種分布、假設檢驗流程
其他概率論知識:條件概率、貝葉斯等
有了統計學的基本知識,你就可以用這些統計量做基本的分析了。通過可視化的方式來描述數據的指標,其實可以得出很多結論了,比如排名前100的是哪些,平均水平是怎樣的,近幾年的變化趨勢如何……
你可以使用python的包 Seaborn(python包)在做這些可視化的分析,你會輕松地畫出各種可視化圖形,並得出具有指導意義的結果。了解假設檢驗之後,可以對樣本指標與假設的總體指標之間是否存在差別作出判斷,已驗證結果是否在可接受的范圍。
python數據分析
如果你有一些了解的話,就知道目前市面上其實有很多 Python 數據分析的書籍,但每一本都很厚,學習阻力非常大。但其實真正最有用的那部分信息,只是這些書里很少的一部分。比如用 Python 實現不同案例的假設檢驗,其實你就可以對數據進行很好的驗證。
比如掌握回歸分析的方法,通過線性回歸和邏輯回歸,其實你就可以對大多數的數據進行回歸分析,並得出相對精確地結論。比如DataCastle的訓練競賽「房價預測」和「職位預測」,都可以通過回歸分析實現。這部分需要掌握的知識點如下:
回歸分析:線性回歸、邏輯回歸
基本的分類演算法:決策樹、隨機森林……
基本的聚類演算法:k-means……
特徵工程基礎:如何用特徵選擇優化模型
調參方法:如何調節參數優化模型
Python 數據分析包:scipy、numpy、scikit-learn等
在數據分析的這個階段,重點了解回歸分析的方法,大多數的問題可以得以解決,利用描述性的統計分析和回歸分析,你完全可以得到一個不錯的分析結論。
當然,隨著你實踐量的增多,可能會遇到一些復雜的問題,你就可能需要去了解一些更高級的演算法:分類、聚類,然後你會知道面對不同類型的問題的時候更適合用哪種演算法模型,對於模型的優化,你需要去學習如何通過特徵提取、參數調節來提升預測的精度。這就有點數據挖掘和機器學習的味道了,其實一個好的數據分析師,應該算是一個初級的數據挖掘工程師了。
系統實戰
這個時候,你就已經具備了數據分析的基本能力了。但是還要根據不同的案例、不同的業務場景進行實戰。能夠獨立完成分析任務,那麼你就已經打敗市面上大部分的數據分析師了。
如何進行實戰呢?
上面提到的公開數據集,可以找一些自己感興趣的方向的數據,嘗試從不同的角度來分析,看看能夠得到哪些有價值的結論。
另一個角度是,你可以從生活、工作中去發現一些可用於分析的問題,比如上面說到的電商、招聘、社交等平台等方向都有著很多可以挖掘的問題。
開始的時候,你可能考慮的問題不是很周全,但隨著你經驗的積累,慢慢就會找到分析的方向,有哪些一般分析的維度,比如top榜單、平均水平、區域分布、年齡分布、相關性分析、未來趨勢預測等等。隨著經驗的增加,你會有一些自己對於數據的感覺,這就是我們通常說的數據思維了。
你也可以看看行業的分析報告,看看優秀的分析師看待問題的角度和分析問題的維度,其實這並不是一件困難的事情。
在掌握了初級的分析方法之後,也可以嘗試做一些數據分析的競賽,比如 DataCastle 為數據分析師專門定製的三個競賽,提交答案即可獲取評分和排名:
員工離職預測訓練賽
美國King County房價預測訓練賽
北京PM2.5濃度分析訓練賽
種一棵樹最好的時間是十年前,其次是現在。現在就去,找一個數據集開始吧!!
E. 怎麼用資料庫統計匯總啊
1.用SELECT語句對數據進行統計匯總
2.集合函數(聚合函數,統計函數)
3.為了有效處理查詢得到的數據集合,SQL Server提供了一系列統計函數.
4.這些函數可以實現數據集合和匯總:
avg ([ALL|DISTINCT]列名) 求指定數字欄位的平均值
sum ([ALL|DISTINCT]列名) 求指定數字欄位的總和
max([ALL|DISTINCT]列名) 求指定數字欄位中最大值
min ([ALL|DISTINCT]列名) 求指定數字欄位中最小值
count([ALL|DISTINCT]列名) 求滿足條件記錄中指定欄位不為空的記錄個數
count(*) 求滿足條件記錄總數
**********************************************************************************************
5.用GROUP BY子句對記錄分類統計匯總
格式:
GROUP BY 分組欄位名列表[HAVING 條件表達式]
功能:按指定條件對指定欄位依次分組進行統計匯總
注:
使用GROUP BY 的語句仍可用ORDER BY子句排序
但必須在GROUP BY之後可以使用別名但不允許對SELECT沒指定的列排序
HAVING子句是對分組統計後的查詢結果進行篩選.
使用GROUP BY 的select語句仍可用WHERE子句指定條件
**********************************************************************************************
說明:
Select 指定的欄位必須包含且只含GROUP BY子句中指定的分組欄位(可以為它指定別名),
其他必須是由集合函數組成的一個或多個計算列,統計函數中所使用的列不受限制.
GROUP BY子句中不允許使用欄位或計算列的別名,可直接使用表達式.
GROUP BY子句指定表達式時,select指定的欄位中可以不包括該表達式.
HAVING子句不允許使用別名
HAVING子句必須和GROUP BY一起使用,且設置的條件必須與GROUP BY 子句指定的分組欄位有關
F. 資料庫優化怎麼做
太復雜了,簡單的說兩句吧,
比如存儲過程優化,選擇一個好的資料庫引擎,然後使用NTFS磁碟格式,
把資料庫臨時文件用單獨的磁碟保存,要創建適當的索引,
有技術的話單獨為資料庫創建一個緩存伺服器,
有錢的話選擇X64的伺服器系統和資料庫引擎,簡直是如虎添翼。。。
G. pig 是資料庫嗎
Pig是一個基於Hadoop的大規模數據分析平台,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換為一系列經過優化處理的MapRece運算。Pig為復雜的海量數據並行計算提供了一個簡單的操作和編程介面。
H. 如果自己要建立一個小型資料庫,你有什麼建議用sql,有哪些方面的資料庫選擇
mysql 或是sql server都可以,雖然沒有oracle那麼嚴謹,但從操縱方便性而言還是前者好
I. 大數據需要掌握哪些技能
大數據技術體系龐大,包括的知識較多
1、學習大數據首先要學習Java基礎
Java是大數據學習需要的編程語言基礎,因為大數據的開發基於常用的高級語言。而且不論是學hadoop,
2、學習大數據必須學習大數據核心知識
Hadoop生態系統;HDFS技術;HBASE技術;Sqoop使用流程;數據倉庫工具HIVE;大數據離線分析Spark、Python語言;數據實時分析Storm;消息訂閱分發系統Kafka等。
3、學習大數據需要具備的能力
數學知識,數學知識是數據分析師的基礎知識。對於數據分析師,了解一些描述統計相關的內容,需要有一定公式計算能力,了解常用統計模型演算法。而對於數據挖掘工程師來說,各類演算法也需要熟練使用,對數學的要求是最高的。
4、學習大數據可以應用的領域
大數據技術可以應用在各個領域,比如公安大數據、交通大數據、醫療大數據、就業大數據、環境大數據、圖像大數據、視頻大數據等等,應用范圍非常廣泛。
J. 如何讓資料庫的數據與輸入的數據進行運算
公式是一樣的。如果只是輸出結果,直接查詢語句即可,假設資料庫相應欄位名為Fx和Fz:,y是你輸入的數據:
select Fx-y*Fz from 你的數據表
不知我的理解是否有偏差?