2016-03-16 21 views
2

我是一位對所有主要關係數據庫(Oracle,MS SQL Server,MySQL,...)有極高經驗的高級數據庫開發人員,但我是NoSQL世界的新手。最近我的公司決定使用Apache Cassandra數據庫。我現在正在學習這幾個星期,並且提出了以下問題:在Cassandra數據庫中編寫存儲過程

Q>我們可以在Cassandra數據庫中創建一個存儲過程或函數嗎?如果是,Cassandra是否提供自己的編程語言(如Oralce的PL/SQL)?如果它沒有自己的語言,我們可以使用什麼語言?它是Java嗎?如果是Java,我們是否需要單獨安裝Java?或者它與Cassandra一起安裝並內置於其中,可以在存儲過程中使用?

回答

1

您可以編寫user defined functions或觸發器(可能是物化視圖)。 UDF實際上只是爲了簡化閱讀可能不是您想要的內容的事情。這真的取決於你想做什麼,除非你是一個非常先進的cassandra用戶,否則我會建議不要觸發觸發器。實體化視圖可以提供你想要的,如果你試圖允許多種方式來查看數據。

真的採取的設計是將其移出數據庫並進入您的應用程序。請記住,這個想法是反規範化,而不是標準化你的數據。通常,在設計Cassandra的模式時,您最終會爲每個查詢創建一個表,並且在插入數據時,您會爲所有相關表創建多個插入。有大量的free training和可用於數據建模的視頻。我建議在構建數據模型之前花大量的時間去完成它,以便以後避免誤解和陷阱。

+0

好的,謝謝你的回答。還有一個問題,如果我們可以在Cassandra中編寫UDF或觸發器,我們使用什麼語言來編寫代碼?如果它是Java,我們可以像一個簡單的Java函數那樣編寫,或者,我們必須創建一個Java類?我們該如何編譯代碼? Cassandra是否已經構建了對Java的支持,以便它可以處理自己的編譯? –

+1

默認情況下,Cassandra 2.2及更高版本支持在java和javascript中定義函數。其他腳本語言(如Python,Ruby和Scala)可以通過向類路徑添加JAR來添加。對於觸發器,你需要用java編寫它,並在類路徑中包含一個jar(我建議遠離觸發器!它們用於高級用例,它們的一般用法可能意味着你設計的模式錯誤)。 –