到目前為止,我們僅靠**就解決了詞頻問題。 本週,我們將在基礎架構的幫助下解決該問題。 面對我們的特定問題,還有什麼比關聯式資料庫更適合?
這是《程式設計風格練習》焦點系列的第 14 個帖子。其他帖子包括:
以程式設計風格介紹練習
以程式設計風格進行練習,將內容堆疊起來
程式設計風格的練習,kwisatz haderach風格
程式設計風格的練習,遞迴
具有高階功能的程式設計風格的練習
以程式設計風格進行練習
以程式設計風格進行練習,回到物件導向的程式設計
程式設計風格的練習:地圖也是物件
程式設計風格的練習:事件驅動的程式設計
程式設計風格的練習和事件匯流排
反思程式設計風格的練習
面向方面的程式設計風格的練習
程式設計風格的練習:fp&i / o
關聯式資料庫風格的練習 (本文)
程式設計風格的練習:電子**
併發程式設計風格的練習
使用hazelcast以程式設計風格進行練習
mapreduce樣式的練習
程式設計風格的練習總結
我們可以通過以下方式解決該問題:載入從資料庫中的檔案讀取的資料,並使用相關查詢檢索前25個單詞。 在sql中,此查詢將簡單地轉換為以下內容:
select
value
,count(*
)ascount
from
words
group
byvalue
order
bycount
desc
limit
25;
python或kotlin都原生提供低階資料庫訪問api。 但是,它們都不是很有趣,因為它只是連線到資料庫,然後傳送sql字串進行查詢。 取而代之的是,讓我們趁此機會使用kotlin sql framework exposed :
公開的是通過jdbc驅動程式為kotlin語言編寫的輕量級sql庫的原型。 它確實具有兩層資料庫訪問:包裝dsl的型別安全sql和輕量級資料訪問物件。這是exposed查詢功能的簡化圖:
這是可以使用的方式:
object
words
:table
()words
.slice
(words
.value
,words
.value
.count
()).
selectall().
groupby
(words
.value).
orderby
(words.id
.count
(),sortorder
.desc).
limit(25
).map.
tomap
()
當然,exposed不僅提供查詢功能,還提供許多其他功能,例如連線到資料庫。 這是**中使用的圖:
這是提供的功能的樣本,以及**樣本:
**建立
object
words
:table
()schemautils
.create
(words
)(2)
通過建立擴充套件提供的table
類的單例來定義table
在資料庫中建立表
資料庫連線
database
.connect
("jdbc:h2:mem:test"
,(1)"org.h2.driver"
(2))
jdbc url
jdbc驅動器類名稱。 包含驅動程式的jar必須可訪問
交易處理
transaction
transaction
塊中定義的每個**段都將在transaction
內部執行。 預設情況下,該事務是從執行緒local儲存和檢索的。
至少可以說,在資料庫中載入文字檔案以執行查詢並不是最佳選擇。 實際上,這是乙個非常糟糕的用例。
但是,在大多數情況下,讓資料庫完成所有工作是必經之路:請確保探索資料儲存的所有功能,而不要通過語言提供的api在記憶體方面進行工作。
這篇文章的完整源**可以在github上找到。
更進一步:
翻譯自:
關聯式資料庫與非關聯式資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...
關聯式資料庫與非關聯式資料庫
關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...
mysql關聯式資料庫 關聯式資料庫概述
為什麼需要資料庫?因為應用程式需要儲存使用者的資料,比如word需要把使用者文件儲存起來,以便下次繼續編輯或者拷貝到另一台電腦。要儲存使用者的資料,乙個最簡單的方法是把使用者資料寫入檔案。例如,要儲存乙個班級所有學生的資訊,可以向檔案中寫入乙個csv檔案 id,name,gender,score 1...