MongoDB数据库--扩展Base64,算法
非關(guān)系型數(shù)據(jù)庫(NO-SQL:Not Only SQL)
非關(guān)系型數(shù)據(jù)庫的誕生:隨著IT的發(fā)展,變革,數(shù)據(jù)量越來越大,數(shù)據(jù)之間的關(guān)系越來越零散,松散,沒有太大的關(guān)系,利用關(guān)系型數(shù)據(jù)庫已不能更好的滿足我們的需求,使用起來非常復雜,浪費大量的空間。為了解決這種問題就出現(xiàn)了一些能處理松散的,數(shù)據(jù)與數(shù)據(jù)之間沒有太大關(guān)系的數(shù)據(jù)庫,即NoSQL非關(guān)系型數(shù)據(jù)庫,如MongoDB等
非關(guān)系型數(shù)據(jù)庫適合存放結(jié)構(gòu)松散,相互之間關(guān)系不明確的數(shù)據(jù)
常用產(chǎn)品:
MongoDB (文檔)
Redis (鍵值對)
HBase (一列列的數(shù)據(jù))
?
緩存優(yōu)化 能不用關(guān)系型數(shù)據(jù)庫就不用,非要用就減少數(shù)據(jù)庫的使用,將數(shù)據(jù)寫入Redis
?
NoSQL數(shù)據(jù)庫的四大分類
1.鍵值型
2.列存儲型
3.文檔型,比如MongoDB等
4.圖形
?
?
Base64編碼
Base64編碼是一種“防君子不防小人”的編碼方式。廣泛應(yīng)用于MIME協(xié)議,作為電子郵件的傳輸編碼,生成的編碼可逆,后一兩位可能有“=”,生成的編碼都是ascii字符。 優(yōu)點:速度快,ascii字符,肉眼不可理解 缺點:編碼比較長,非常容易被破解,僅適用于加密非關(guān)鍵信息的場合
import base64
?
str1 = 'nihao,中國!'
?
r = base64.b64encode(str1.encode())
print(r)
r = base64.b64decode(r)
print(r.decode())
?
for...else while..else
for i in range(5):
? print(i)
? if i == 3:
? break # 跳出for循環(huán)
else: # 當for循環(huán)全部執(zhí)行完畢才會執(zhí)行else,沒全部執(zhí)行,如執(zhí)行了break就不會執(zhí)行else
? print(i)
print("end....")
while循環(huán)也是如此,但如果while執(zhí)行了continue,else也會被執(zhí)行
?
?
MongoDB
show dbs 顯示所有數(shù)據(jù)庫
db 當前數(shù)據(jù)庫
use mydb 創(chuàng)建mydb數(shù)據(jù)庫
db.student.insert({"sno":1001, "name":"張三"}) 插入數(shù)據(jù)
db.dropDatabase() 刪除當前數(shù)據(jù)庫
db.student.drop() 刪除集合 刪除后如果數(shù)據(jù)庫中沒有其他集合,該數(shù)據(jù)庫將會看不到
db.student.find() 查看文檔
db.student.update({"sno":1001},{$set:{"name":"張三豐"}}) 將學號為1001的學
生的姓名更改為張三豐
db.student.remove({"name": "王五"}) 將student表中所有名字叫王五的信息刪掉
?
如果數(shù)據(jù)庫中沒有一個集合是不會顯示的,所以show dbs就看不到
MongoDB的文檔不需要設(shè)置相同的字段
?
集合沒有固定的結(jié)構(gòu),可以插入不同格式和類型的數(shù)據(jù)
?
對象為什么能當做字典來使用,只要實現(xiàn)對象中的getitem就可以當做字典來使用
?
MongoDB在Python中使用
?
import pymongo
?
conn = pymongo.MongoClient()
?
# 創(chuàng)建數(shù)據(jù)庫
db = conn["mydb"]
# 創(chuàng)建集合
stus = db["student"]
?
s = {"sno": 1001, "name": "張三", "sex": "男"}
# 向student集合中插入一個文檔
stus.insert_one(s)
s = {"sno": 1001, "name": "李四", "sex": "男"}
# 向student集合中插入一個文檔
stus.insert_one(s)
?
r = stus.find({"name":"張三"})
print(r0)
?
stus.update_one({"name": "張三"}, {"$set": {"name":"張三豐"}})
?
# 刪
r = stus.delete_many({"name": {"$regex": "^張"}})
# 刪除的個數(shù)
print(r.deleted_count)
?
# stus.insert_one(s)
?
# stus.remove()
?
#查看所有數(shù)據(jù)庫
#print(conn.list_database_names())
?
?
算法(Algorithm)
解決某個問題的方法,比如冒泡排序,哈希算法,二分查找算法等
評估算法優(yōu)劣:時間復雜度,空間復雜度
程序本質(zhì)就是對數(shù)據(jù)進行處理,想要對數(shù)據(jù)進行處理,總要有位置放,放就放在存儲器,存儲器就是內(nèi)存的容器。存儲器分為兩種,內(nèi)存和外存,內(nèi)存訪問速度極快,容量很小,但數(shù)據(jù)容易流失,外存容量很大,可以持久存放數(shù)據(jù),想要把數(shù)據(jù)存放在外存上需要通過文件,而放在內(nèi)存上是零散的
算法的空間復雜度計算的是算法執(zhí)行過程中需要消耗的存儲空間,而原始數(shù)據(jù)所占的空間并不進行考慮
同一個算法的時間空間復雜度跟其的規(guī)模有關(guān),即時間復雜度和空間復雜度是問題規(guī)模n的函數(shù),n越大時間耗費越長
時間復雜度的衡量一般是基于基本操作(單個操作)的次數(shù)
#時間復雜度o(n)
#空間復雜度o(1)
def index(seq, val):
? i = 0
? while i < len(seq):
? if seq[i] == val: return i
? else:
? return -1
?
算法的描述方式:
1.自然語言,比如中文,日文等;
2.偽代碼;即隨意,能看懂意思就行
3.編程語言;最終期望來實現(xiàn)
?
重點:
常用算法:
排序算法(至少4中:冒泡,選擇,插入,快排),查找算法(二分查找算法),哈希算法(時間是最快的,但耗費大量的存儲空間),
記住常用算法的實現(xiàn)
記住常用算法的時間和空間復雜度
?
數(shù)據(jù)結(jié)構(gòu)(Data Structure)
數(shù)據(jù)的一種組織形式,表示方式
集合:
線性結(jié)構(gòu):順序表、鏈表、棧、隊列、串(字符串)
樹形結(jié)構(gòu):二叉樹、樹、森林
圖狀結(jié)構(gòu):像漁網(wǎng)一樣,數(shù)據(jù)之間有千絲萬縷的聯(lián)系
?
算法和數(shù)據(jù)結(jié)構(gòu)是每個程序猿必須要不斷修煉的內(nèi)功!
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/yanruizhe/p/11426150.html
總結(jié)
以上是生活随笔為你收集整理的MongoDB数据库--扩展Base64,算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 火狐浏览器不能上网解决办法
- 下一篇: Python添加邮件附件并通过邮件发送测