2015-08-16 68 views
0

我需要處理一些在大多數情況下不需要寫入磁盤的數據。我正在使用SQLAlchemy來處理數據庫操作。這些數據來自json字符串。例如,SQLAlchemy類會比普通類慢嗎?

from sqlalchemy import String, Column 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 
class Class1(Base): 
    __tablename__ = 'table' 

    data = Column(String) 
    #and some other data members 
    @staticmethod 
    def parse(json_): 
     #parse the json and return a list of Class1 instances 

class Class2(): 
    __init__(self, data): 
     self.data = data 
     #and some other data members 
    @staticmethod 
    def parse(json_): 
     #parse the json and return a list of Class2 instances 

基本上,這兩個類是相同的,除了Class1可以處理數據庫和Class2不能。有兩個類之間的性能差異時

  1. 創建一個從json的情況下,
  2. 正常操作,例如讀取一個實例數據?

如果有性能差異,是否有一個很好的解決方案,可以消除它,同時保持DRY?

回答

1

根據您的示例代碼,沒有任何可見的東西會導致顯着的性能差異。

但是,如果您認爲有微觀優化可能有助於您的特定工作流程,那麼您應該對自己的結果進行基準測試。

參見:剖析Python的How can you profile a python script?

1

當然是有一些區別,因爲SQLAlchemy的的機器通過Base -class拉到增加了一些開銷。但是你問的是錯誤的問題。可能會有性能差異,但是如果它對您的程序至關重要,以便它證明違反DRY原則,並不取決於這種差異本身,而是您實際的程序總體上做了什麼,以及它如何執行。

如果它的速度足以完成工作 - 不要麻煩。如果是不是夠快,檔案。看看你真正的瓶頸在哪裏,不要預期。

+0

有一個類似的問題,但不同的問題。如果我有一個客戶端/服務器程序。服務器需要將數據寫入數據庫,而客戶端則不需要。我認爲在客戶端使用SQLAlchemy類並不是一個好主意,但在客戶端和服務器端編寫兩個不同的類並不是一個好主意。 – iuradz

+0

如果您不想回答您的問題,請提出其他問題。而且我不確定是否假設追逐是關於什麼的。如果你的問題是「我可以寫一個複雜的元庫來生成普通和SQLAlchemy派生類」,答案是肯定的。但是,如果這是可行的,那麼從廣義上講,這又不是可以負責任的。客戶端中的用戶類可能服務於與服務器不同的目的 - 因此可能有必要編寫兩種不同的實現。它可能也不是 - 但同樣需要具體問題。推測在這裏沒有幫助。 – deets

+0

而一個複雜的元庫引發維護和可接近性問題,這可能會引起最小化DRY的價值。 DRY和類似的經驗法則不是絕對的。瞭解他們需要什麼以及哪些地方沒有一般經驗,但也是您的實際問題。 – deets