如何在 Python Firebase Admin SDK 中减少 SSL 开销



我已经创建了一个代码,使用 python 中的firebase_adminsdk 将实时数据更新到 Firebase,但 SSL 开销使总下载量非常大。 无论如何,可以使用Python减少SSL开销并与Firebase实时数据库建立持久连接

#Import 
import xlrd
import sched, time
#scheduler
s = sched.scheduler(time.time, time.sleep)
#Firebase admin
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
cred = credentials.Certificate(r"C:UsersHPDesktopPythonsResourceAccountKey.json")
#Initilising Database
firebase_admin.initialize_app(cred, {
'databaseURL' : 'https://database.firebaseio.com/'
})
#Loop to run every second
def do_something(sc):
print("Opening excel....")
#Opening Document
file_location=r"C:UsersHPDesktopNIFTY 50 Fyers.xlsm"
try:
workbook=xlrd.open_workbook(file_location)
print("Opened")
#Opening first sheet
sheet=workbook.sheet_by_index(0)
#Creating stockdictionary
stockdata={}
for i in range(1,50):
stockdata[str(sheet.cell_value(i,0))]=sheet.cell_value(i,1)
#Writing data into firebase database    
db.reference("Live Data/N50 Stocks").update(stockdata)
#Display Result
print("Stock Data Updated")

indicesdata={}
for j in range(74,100):
indicesdata[str(sheet.cell_value(j,0))]=sheet.cell_value(j,1)
#Writing data into firebase database    
db.reference("Live Data/Indices").update(indicesdata)
#Display Result
print("Indices Data Updated")
#Opening second sheet
sheet=workbook.sheet_by_index(1)
optionsdata={}
for k in range(2,41):
optionsdata[str(sheet.cell_value(k,0))]=sheet.cell_value(k,2)
#Writing data into firebase database    
db.reference("Live Data/Options").update(optionsdata)
#Display Result
print("Option Data Updated")

#All data finished
print("____________")
except Exception:
print("*********Exception Occured**********")
#Calling Loop Again
#s.enter(1, 1, do_something, (sc,))
pass
#Calling Loop Again
s.enter(1, 1, do_something, (sc,))
#Repeat
s.enter(1, 1, do_something, (s,))
s.run()

此连接应该持续 8 小时,并且 firebase SSL 开销减少方法很难挖掘,任何人都可以缩短此代码以避免 SSL 开销并使与 Firebase 的数据连接顺畅并使用更少的数据下载。

经过几年的测试,我找到了答案

There is no way to reduce overhead但我们可以reduce the number of writes per second

溶液

  • 避免每秒写入太多次
  • 将数据合并到字典中,并在 5 分钟间隔内更新为 1 个请求而不是 1 秒更新
  • 如果要更新多个子节点,请尝试使用单个请求而不是多个写入请求来执行此操作

坏路

data_list={1:{"Reliance":2500},2:{"LT":3500},3:{"Airtel":2500}}
print(data_list)
for key in data_list:
data=data_list[key]
stockdata=data.keys()
stock_name=list(stockdata)[0]
value=data[stock_name]

print(list(stockdata)[0],":",value)

update_db_everysecond(stockname,value)

好办法

last_updated_time=now()
store_into_single_file={}
def store_it_in_bulk(stockname,value):
if store_into_single_file
store_into_single_file[timeinmill]={}
if(last_updated_time-now()>5_minutes):
Update_the_database()
update last_updated_time
store_into_single_file.clear
else:
store_into_single_file[timeinmill][stockname]=value

for key in data_list:
stock_name=list(data_list[key].keys())[0]
value=data_list[key][stock_name]
print(list(stock_name,":",value)
store_it_in_bulk(stock_name,value)

最新更新