本發(fā)明屬于數據存儲領域,尤其涉及一種基于Hbase數據庫的數據寫入方法及裝置。
背景技術:
目前云存儲系統(tǒng)多采取分布式存儲的方法,將數據分散存儲在多臺獨立的設備上,一方面完善了數據庫的性能,提高了數據的讀取效率;另一方面由于分布式存儲結構,在有存儲設備故障發(fā)生時,只會影響局部數據的存取,而不會使整個數據庫癱瘓,進而增加了大數據的安全性和可靠性。Hadoop數據庫(HBase,Hadoop Database)是一種分布式存儲系統(tǒng)。雖然HBase數據庫可以避免在存儲設備發(fā)送故障時,不會影響數據庫中全部數據的存取,但是無法避免在數據寫入過程中產生故障,進而導致無法通過索引查詢到目標數據。
現有技術中,預寫式日志WAL(Write Ahead Logging)是確保數據完整性的標準方法。在數據庫崩潰的情況下,通過WAL預先存儲的日志來恢復數據庫。預先存儲的日志需要記錄每一次的存儲過程,故日志會占用系統(tǒng)大量存儲資源,同時占用系統(tǒng)的I/O資源,一旦存儲的數據量增多,必會降低數據存儲的效率。
技術實現要素:
本發(fā)明提供一種基于Hbase數據庫的數據寫入方法及裝置,旨在解決因現有技術中預先存儲的日志占用系統(tǒng)大量資源而導致降低數據存儲效率的問題。
本發(fā)明提供的一種基于Hbase數據庫的數據寫入方法,包括:從線程中獲取待寫入文件對應的數據記錄、所述數據記錄對應的行主鍵值以及所述線程的識別碼,并生成包含有所述數據記錄與所述行主鍵值之間的對應關系的行主鍵列表,同時將所述獲取的線程的識別碼和所述生成的行主鍵列表作為基準數據;將所述獲取的數據記錄、所述獲取的數據記錄對應的行主鍵值、所述獲取的線程的識別碼和所述生成的行主鍵列表寫入數據庫中的緩存內存中;將所述緩存內存中存儲的數據記錄、所述存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入所述數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于所述緩存內存中的線程的識別碼和行主鍵列表作為待比對數據;將所述基準數據與所述待比對數據進行比對,若比對結果為存在有數據記錄未寫入所述數據庫的分布式文件系統(tǒng)中,則重新將所述待寫入文件寫入所述數據庫中。
本發(fā)明提供的一種基于Hbase數據庫的數據寫入裝置,包括:獲取模塊,用于從線程中獲取待寫入文件對應的數據記錄、所述數據記錄對應的行主鍵值以及所述線程的識別碼,并生成包含有所述數據記錄與所述行主鍵值之間的對應關系的行主鍵列表,同時將所述獲取的線程的識別碼和所述生成的行主鍵列表作為基準數據;處理模塊,用于將所述獲取的數據記錄、所述獲取的數據記錄對應的行主鍵值、所述獲取的線程的識別碼和所述生成的行主鍵列表寫入數據庫中的緩存內存中;所述處理模塊,還用于將所述緩存內存中存儲的數據記錄、所述存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入所述數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于所述緩存內存中的線程的識別碼和行主鍵列表作為待比對數據;所述處理模塊,還用于將所述基準數據與所述待比對數據進行比對,若比對結果為存在有數據記錄未寫入所述數據庫的分布式文件系統(tǒng)中,則重新將所述待寫入文件寫入所述數據庫中。
本發(fā)明提供的基于Hbase數據庫的數據寫入方法及裝置,從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據,將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中,將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據,將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,這樣每次在寫入數據后,均通過比對確定數據是否全部寫入到數據庫中,進而確保數據存儲的完整性,同時相比于以日志文件的方式記錄,本發(fā)明利用行主鍵列表來比對,占用系統(tǒng)資源很小,進而不會影響數據存儲效率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例。
圖1是本發(fā)明第一實施例提供的基于Hbase數據庫的數據寫入方法的實現流程示意圖;
圖2是本發(fā)明第二實施例提供的基于Hbase數據庫的數據寫入方法的實現流程示意圖;
圖3是本發(fā)明第三實施例提供的基于Hbase數據庫的數據寫入裝置的結構示意圖;
圖4是本發(fā)明第四實施例提供的基于Hbase數據庫的數據寫入裝置的結構示意圖。
具體實施方式
為使得本發(fā)明的發(fā)明目的、特征、優(yōu)點能夠更加的明顯和易懂,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而非全部實施例?;诒景l(fā)明中的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參閱圖1,圖1為本發(fā)明第一實施例提供基于Hbase數據庫的數據寫入方法的實現流程示意圖,可應用于具有數據處理功能的終端中,如計算機,圖1所示的基于Hbase數據庫的數據寫入方法,主要包括以下步驟:
S101、從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據。
Hbase數據庫包括多個線程(Threads),該多個線程用于分配和調度。一個線程均對應一個線程的識別碼,即線程的身份標識號(ID,identification)。在實際應用中,一個待寫入文件可以分成多個數據記錄,一個待寫入文件中的大多數數據記錄會分配到一個線程中,但是也有分配到多個線程中的可能。一個數據記錄對應一個行主鍵值(rowkey)。該行主鍵列表中包含多個該數據記錄與該行主鍵值之間的對應關系,其中該行主鍵列表與獲取的線程的ID相對應。
可選地,還可以將該行主鍵列表與該待寫入文件的相對應,并將該行主鍵列表與該待寫入文件的對應關系進行存儲,并同時告知線程存儲該行主鍵列表與該待寫入文件的對應關系。
S102、將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中。
Hbase數據庫的緩存內存為MemStore,在實際應用中,將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入內存MemStore中。
S103、將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據。
這里是將S102中緩存內存存儲的數據寫入到分布式文件系統(tǒng),即HBase數據庫的Hfile中。
S104、將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中。
比對的過程是為了確保寫入到分布式文件系統(tǒng)中的數據的完整性。若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,即需要重新執(zhí)行步驟S101到步驟S104。
本發(fā)明實施例中,從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據,將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中,將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據,將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,這樣每次在寫入數據后,均通過比對確定數據是否全部寫入到數據庫中,進而確保數據存儲的完整性,同時相比于以日志文件的方式記錄,本發(fā)明實施例利用行主鍵列表來比對,占用系統(tǒng)資源很小,進而不會影響數據存儲效率。
請參閱圖2,圖2為本發(fā)明第二實施例提供的基于Hbase數據庫的數據寫入方法的實現流程示意圖,可應用于具有數據處理功能的終端中,如計算機,圖2所示的基于Hbase數據庫的數據寫入方法,主要包括以下步驟:
S201、將該待寫入文件中數據記錄發(fā)送至線程中,以通過該線程將該線程接收到的每一數據記錄生成對應的行主鍵值。
一個數據記錄對應一個行主鍵值。在實際應用中,一個待寫入文件可以分成多個數據記錄,一個待寫入文件中的大多數數據記錄會分配到一個線程中,但是也有分配到多個線程中的可能。在實際應用中,線程是通過哈希(Hash)算法生成的rowkey值。
S202、從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據。
該行主鍵列表中包含多個該數據記錄與該行主鍵值之間的對應關系,其中該行主鍵列表與獲取的線程的ID相對應。
可選地,還可以告知線程存儲該行主鍵列表與該待寫入文件的對應關系。
S203、將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中。
Hbase數據庫的緩存內存為MemStore,在實際應用中,將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入內存MemStore中。
S204、將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據。
這里是將S203中緩存內存存儲的數據寫入到分布式文件系統(tǒng),即HBase數據庫的Hfile中。在實際應用中,首先將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表轉發(fā)給HBase數據庫的HStore,然后通過commit方式將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入到HFile中。在寫入HFile之后,將該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據保存在該緩存內存所在的服務器中。
S205、將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中。
比對的過程是為了確保寫入到分布式文件系統(tǒng)中的數據的完整性。若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,即需要重新執(zhí)行步驟S201到步驟S205。
可選地,將該基準數據與該待比對數據進行比對具體為:
判斷該待比對數據中的線程的識別碼與該基準數據中的線程的識別碼是否一致;
若一致,則將該待比對數據中的行主鍵列表與該基準數據中的行主鍵列表進行比對;
若該待比對數據中的行主鍵列表與該基準數據中的行主鍵列表完全一致,則該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中;
若該待比對數據中的行主鍵列表與該基準數據中的行主鍵列表不一致,則該比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中。
首先要判斷該基準數據和待比對數據中線程的ID是否一致,在線程的ID一致的條件下,再比對該基準數據和待比對數據中行主鍵列表的一致性。
可選地,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中具體為:
若該比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則從該基準數據的行主鍵列表中查找該待比對數據的行主鍵列表中缺失的行主鍵值;
按照該基準數據或該待比對數據中線程的識別碼,從該線程中獲取該缺失的行主鍵值所在的行主鍵列表以及該獲取的行主鍵列表對應的待寫入文件,其中該線程中存儲有行主鍵列表與待寫入文件之間的對應關系;
重新將該待寫入文件對應的數據記錄寫入該數據庫中,并重新比對基準數據和待比對數據,直至該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中。
首先是確定缺失的行主鍵值所在的行主鍵列表,然后通過行主鍵列表查找到線程的ID,最后通過線程中存儲的行主鍵列表與待寫入文件之間的對應關系,利用行主鍵列表找到需要重新寫入的待寫入文件,然后重新執(zhí)行步驟S201-步驟S205,直至該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,這樣避免了數據丟失,確保數據可以完整的存儲在數據庫中。
需要說明的是,對于重新寫入的同一待寫入文件,對應生成的rowkey值均是相同,同時也可以理解為行主鍵列表是相同的,這樣可以避免重復存入相同的數據記錄。
可選地,該將該基準數據與該待比對數據進行比對之后,還包括:
若該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則刪除該基準數據和該待比對數據;
按照該基準數據或該待比對數據中線程的識別碼,向該線程發(fā)送刪除提示信息,該刪除提示信息用于提示刪除存儲于該線程中的行主鍵列表與該待寫入文件之間的對應關系。
若該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,刪除該基準數據和該待比對數據,以及告知線程刪除存儲于該線程中的行主鍵列表與該待寫入文件之間的對應關系,這樣可以釋放部分的存儲空間,優(yōu)化了系統(tǒng)資源。
本發(fā)明實施例中,將該待寫入文件中數據記錄發(fā)送至線程中,以通過該線程將該線程接收到的每一數據記錄生成對應的行主鍵值,從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據,將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中,將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據,將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,這樣每次在寫入數據后,均通過比對確定數據是否全部寫入到數據庫中,進而確保數據存儲的完整性,同時相比于以日志文件的方式記錄,本發(fā)明利用行主鍵列表來比對,占用系統(tǒng)資源很小,進而不會影響數據存儲效率。
請參閱圖3,圖3是本發(fā)明第三實施例提供的基于Hbase數據庫的數據寫入裝置的結構示意圖,為了便于說明,僅示出了與本發(fā)明實施例相關的部分。圖3示例的基于Hbase數據庫的數據寫入裝置可以是前述圖1和圖2所示實施例提供的基于Hbase數據庫的數據寫入方法的執(zhí)行主體。圖3示例的基于Hbase數據庫的數據寫入裝置,主要包括:獲取模塊301和處理模塊302。以上各功能模塊詳細說明如下:
獲取模塊301,用于從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據;
處理模塊302,用于將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中;
處理模塊302,還用于將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據;
處理模塊302,還用于將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中。
一個線程均對應一個線程的識別碼,即線程的ID。一個待寫入文件可以分成多個數據記錄,一個待寫入文件中的大多數數據記錄會分配到一個線程中,但是也有分配到多個線程中的可能。該行主鍵列表中包含多個該數據記錄與該行主鍵值之間的對應關系,其中該行主鍵列表與獲取的線程的ID相對應??蛇x地,還可以將該行主鍵列表與該待寫入文件的相對應,并將該行主鍵列表與該待寫入文件的對應關系進行存儲,并同時告知線程存儲該行主鍵列表與該待寫入文件的對應關系。Hbase數據庫的緩存內存為MemStore。
比對的過程是為了確保寫入到分布式文件系統(tǒng)中的數據的完整性。若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則處理模塊302重新將該待寫入文件寫入該數據庫中。
本實施例未盡之細節(jié),請參閱前述圖1所示實施例的描述,此處不再贅述。
需要說明的是,以上圖3示例的基于Hbase數據庫的數據寫入裝置的實施方式中,各功能模塊的劃分僅是舉例說明,實際應用中可以根據需要,例如相應硬件的配置要求或者軟件的實現的便利考慮,而將上述功能分配由不同的功能模塊完成,即將基于Hbase數據庫的數據寫入裝置的內部結構劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。而且,實際應用中,本實施例中的相應的功能模塊可以是由相應的硬件實現,也可以由相應的硬件執(zhí)行相應的軟件完成。本說明書提供的各個實施例都可應用上述描述原則,以下不再贅述。
本發(fā)明實施例中,獲取模塊301從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據,處理模塊302將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中,處理模塊302將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據,處理模塊302將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,這樣每次在寫入數據后,均通過比對確定數據是否全部寫入到數據庫中,進而確保數據存儲的完整性,同時相比于以日志文件的方式記錄,本發(fā)明利用行主鍵列表來比對,占用系統(tǒng)資源很小,進而不會影響數據存儲效率。
請參閱圖4,圖4為本發(fā)明第四實施例提供的基于Hbase數據庫的數據寫入裝置的結構示意圖,為了便于說明,僅示出了與本發(fā)明實施例相關的部分。圖4示例的基于Hbase數據庫的數據寫入裝置可以是前述圖1和圖2所示實施例提供的基于Hbase數據庫的數據寫入方法的執(zhí)行主體。圖4示例的基于Hbase數據庫的數據寫入裝置,主要包括:發(fā)送模塊401、獲取模塊402、處理模塊403、刪除模塊404和提示模塊405,其中處理模塊403中包括比對子模塊4031;處理模塊403中還包括查找子模塊4032、獲取子模塊4033和重置子模塊4034。以上各功能模塊詳細說明如下:
發(fā)送模塊401,用于將該待寫入文件中數據記錄發(fā)送至線程中,以通過該線程將該線程接收到的每一數據記錄生成對應的行主鍵值。
獲取模塊402,用于從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據;
處理模塊403,用于將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中;
該處理模塊403,還用于將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據;
該處理模塊403,還用于將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中。
一個數據記錄對應一個行主鍵值。在實際應用中,一個待寫入文件可以分成多個數據記錄,一個待寫入文件中的大多數數據記錄會分配到一個線程中,但是也有分配到多個線程中的可能。在實際應用中,線程是通過Hash算法生成的rowkey值。該行主鍵列表中包含多個該數據記錄與該行主鍵值之間的對應關系,其中該行主鍵列表與獲取的線程的ID相對應。
可選地,發(fā)送模塊401還用于告知線程存儲該行主鍵列表與該待寫入文件的對應關系。
可選地,處理模塊403包括:比對子模塊4031;
比對子模塊4031,用于判斷該待比對數據中的線程的識別碼與該基準數據中的線程的識別碼是否一致;
比對子模塊4032,還用于若一致,則將該待比對數據中的行主鍵列表與該基準數據中的行主鍵列表進行比對;
比對子模塊4031,還用于若該待比對數據中的行主鍵列表與該基準數據中的行主鍵列表完全一致,則該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中;
比對子模塊4031,還用于若該待比對數據中的行主鍵列表與該基準數據中的行主鍵列表不一致,則該比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中。
可選地,處理模塊403還包括:查找子模塊4032、獲取子模塊4033和重置子模塊4034、刪除子模塊4035和提示子模塊4036;
查找子模塊4032,用于若該比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則從該基準數據的行主鍵列表中查找該待比對數據的行主鍵列表中缺失的行主鍵值;
獲取子模塊4033,用于按照該基準數據或該待比對數據中線程的識別碼,從該線程中獲取該缺失的行主鍵值所在的行主鍵列表以及該獲取的行主鍵列表對應的待寫入文件,其中該線程中存儲有行主鍵列表與待寫入文件之間的對應關系;
重置子模塊4034,用于重新將該待寫入文件對應的數據記錄寫入該數據庫中,并重新比對基準數據和待比對數據,直至該比對結果為沒有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中。
刪除子模塊4035,用于若所述比對結果為沒有數據記錄未寫入所述數據庫的分布式文件系統(tǒng)中,則刪除所述基準數據和所述待比對數據;
提示子模塊4036,用于按照所述基準數據或所述待比對數據中線程的識別碼,向所述線程發(fā)送刪除提示信息,所述刪除提示信息用于提示刪除存儲于所述線程中的行主鍵列表與所述待寫入文件之間的對應關系。
需要說明的是,對于重新寫入的同一待寫入文件,對應生成的rowkey值均是相同,同時也可以理解為行主鍵列表是相同的,這樣可以避免重復存入相同的數據記錄。
本實施例未盡之細節(jié),請參閱前述圖1和圖2所示實施例的描述,此處不再贅述。
本發(fā)明實施例中,發(fā)送模塊401將該待寫入文件中數據記錄發(fā)送至線程中,以通過該線程將該線程接收到的每一數據記錄生成對應的行主鍵值,獲取模塊402從線程中獲取待寫入文件對應的數據記錄、該數據記錄對應的行主鍵值以及該線程的識別碼,并生成包含有該數據記錄與該行主鍵值之間的對應關系的行主鍵列表,同時將該獲取的線程的識別碼和該生成的行主鍵列表作為基準數據,處理模塊403將該獲取的數據記錄、該獲取的數據記錄對應的行主鍵值、該獲取的線程的識別碼和該生成的行主鍵列表寫入數據庫中的緩存內存中,將該緩存內存中存儲的數據記錄、該存儲的數據記錄對應的行主鍵值、存儲的線程的識別碼和存儲的行主鍵列表寫入該數據庫中的分布式文件系統(tǒng)中,并在寫入完成后,將存儲于該緩存內存中的線程的識別碼和行主鍵列表作為待比對數據,將該基準數據與該待比對數據進行比對,若比對結果為存在有數據記錄未寫入該數據庫的分布式文件系統(tǒng)中,則重新將該待寫入文件寫入該數據庫中,這樣每次在寫入數據后,均通過比對確定數據是否全部寫入到數據庫中,進而確保數據存儲的完整性,同時相比于以日志文件的方式記錄,本發(fā)明利用行主鍵列表來比對,占用系統(tǒng)資源很小,進而不會影響數據存儲效率。
在本申請所提供的多個實施例中,應該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述模塊的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個模塊或組件可以結合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信鏈接可以是通過一些接口,裝置或模塊的間接耦合或通信鏈接,可以是電性,機械或其它的形式。
所述作為分離部件說明的模塊可以是或者也可以不是物理上分開的,作為模塊顯示的部件可以是或者也可以不是物理模塊,即可以位于一個地方,或者也可以分布到多個網絡模塊上。可以根據實際的需要選擇其中的部分或者全部模塊來實現本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能模塊可以集成在一個處理模塊中,也可以是各個模塊單獨物理存在,也可以兩個或兩個以上模塊集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現,也可以采用軟件功能模塊的形式實現。
所述集成的模塊如果以軟件功能模塊的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網絡設備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質。
需要說明的是,對于前述的各方法實施例,為了簡便描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發(fā)明并不受所描述的動作順序的限制,因為依據本發(fā)明,某些步驟可以采用其它順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定都是本發(fā)明所必須的。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其它實施例的相關描述。
以上為對本發(fā)明所提供的基于Hbase數據庫的數據寫入方法及裝置的描述,對于本領域的技術人員,依據本發(fā)明實施例的思想,在具體實施方式及應用范圍上均會有改變之處,綜上,本說明書內容不應理解為對本發(fā)明的限制。