當前位置:首頁 » 數據倉庫 » google開源資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

google開源資料庫

發布時間: 2022-08-05 15:03:59

1. 四大開源資料庫是哪些

如果打算為項目選擇一款免費、開源的資料庫,那麼你可能會在Mysql與PostgreSQL之間猶豫不定。MySQL與PostgreSQL都是免
費、開源、強大、且功能豐富的資料庫。你主要的問題可能是:哪一個才是最好的開源資料庫,MySQL還是PostgreSQL呢?該選擇哪一個開源資料庫
呢?

在選擇資料庫時,你所做的是個長期的決策,因為後面如果再改變決定將是非常困難且代價高昂的。你希望一開始就選擇正確。兩個流行
的開源資料庫MySQL與PostgreSQL常常成為最後要選擇的產品。對這兩個開源資料庫的高層次概覽將會有助於你選擇最適合自己需要的。

MySQL

MySQL相對來說比較年輕,首度出現在1994年。它聲稱自己是最流行的開源資料庫。MySQL就是LAMP(用於Web開發的軟體包,包括
Linux、Apache及Perl/PHP/Python)中的M。構建在LAMP棧之上的大多數應用都會使用MySQL,包括那些知名的應用,如
WordPress、Drupal、Zend及phpBB等。

一開始,MySQL的設計目標是成為一個快速的Web伺服器後端,使用
快速的索引序列訪問方法(ISAM),不支持ACID。經過早期快速的發展之後,MySQL開始支持更多的存儲引擎,並通過InnoDB引擎實現了
ACID。MySQL還支持其他存儲引擎,提供了臨時表的功能(使用MEMORY存儲引擎),通過MyISAM引擎實現了高速讀的資料庫,此外還有其他的
核心存儲引擎與第三方引擎。

MySQL的文檔非常豐富,有很多質量不錯的免費參考手冊、圖書與在線文檔,還有來自於Oracle和第三方廠商的培訓與支持。

MySQL近幾年經歷了所有權的變更和一些頗具戲劇性的事件。它最初是由MySQL
AB開發的,然後在2008年以10億美金的價格賣給了Sun公司,Sun公司又在2010年被Oracle收購。Oracle支持MySQL的多個版
本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費下載的,另外一
些則是收費的。其核心代碼基於GPL許可,對於那些不想使用GPL許可的開發者與廠商來說還有商業許可可供使用。

現在,基於最初的
MySQL代碼還有更多的資料庫可供選擇,因為幾個核心的MySQL開發者已經發布了MySQL分支。最初的MySQL創建者之一Michael
"Monty"
Widenius貌似後悔將MySQL賣給了Sun公司,於是又開發了他自己的MySQL分支MariaDB,它是免費的,基於GPL許可。知名的
MySQL開發者Brian Aker所創建的分支Drizzle對其進行了大量的改寫,特別針對多CPU、雲、網路應用與高並發進行了優化。

PostgreSQL

PostgreSQL標榜自己是世界上最先進的開源資料庫。PostgreSQL的一些粉絲說它能與Oracle相媲美,而且沒有那麼昂貴的價格和傲慢的客服。它擁有很長的歷史,最初是1985年在加利福尼亞大學伯克利分校開發的,作為Ingres資料庫的後繼。

PostgreSQL是完全由社區驅動的開源項目,由全世界超過1000名貢獻者所維護。它提供了單個完整功能的版本,而不像MySQL那樣提供了多個
不同的社區版、商業版與企業版。PostgreSQL基於自由的BSD/MIT許可,組織可以使用、復制、修改和重新分發代碼,只需要提供一個版權聲明即
可。

可靠性是PostgreSQL的最高優先順序。它以堅如磐石的品質和良好的工程化而聞名,支持高事務、任務關鍵型應用。
PostgreSQL的文檔非常精良,提供了大量免費的在線手冊,還針對舊版本提供了歸檔的參考手冊。PostgreSQL的社區支持是非常棒的,還有來
自於獨立廠商的商業支持。

數據一致性與完整性也是PostgreSQL的高優先順序特性。PostgreSQL是完全支持ACID特性
的,它對於資料庫訪問提供了強大的安全性保證,充分利用了企業安全工具,如Kerberos與OpenSSL等。你可以定義自己的檢查,根據自己的業務規
則確保數據質量。在眾多的管理特性中,point-in-time
recovery(PITR)是非常棒的特性,這是個靈活的高可用特性,提供了諸如針對失敗恢復創建熱備份以及快照與恢復的能力。但這並不是
PostgreSQL的全部,項目還提供了幾個方法來管理PostgreSQL以實現高可用、負載均衡與復制等,這樣你就可以使用適合自己特定需求的功能
了。

2. Google的GFS和開源的HDFS是()中的代表性方案

Hadoop項目。
1、HDFS(HadoopDistributedFileSystem),作為GoogleFileSystem(GFS)的實現,是Hadoop項目的核心子項目,是分布式計算中數據存儲管理的基礎,是基於流數據模式訪問和處理超大文件的需求而開發的,可以運行於廉價的商用伺服器上。它所具有的高容錯、高可靠性、高可擴展性、高獲得性、高吞吐率等特徵為海量數據提供了不怕故障的存儲,為超大數據集(LargeDataSet)的應用處理帶來了很多便利。
2、GoogleGFS,BigTable,MapRece稱為Google的三駕馬車,是許多基礎服務的基石GFS於2003年提出,是一個分布式的文件系統,與此前的很多分布式系統的前提假設存在很大的不同,適用於以下場景)認為組件失效是一種常態,提供了容錯機制,自動負載均衡,使得分布式文件系統可以在廉價機器上運行)面向大文件存儲,系統主要的工作負載是大規模的流式讀取,寫操作主要是追加方式寫,很少有隨機寫)一次寫入,多次讀取。
3、開源HDFS。分布式文件存儲系統,源自於Google的GFS論文,HDFS是GFS的克隆版HDFS是Hadoop中數據存儲和管理的基礎,是一個高容錯的系統,能夠自動解決硬體故障。

3. 百度和Google等IT類互聯網企業為什麼不用Oracle資料庫呢

1、買不起,(google全球百萬台伺服器)
2、性能跟不上,oracle對硬體依賴非常高
3、只有自己知道最需要什麼,oracle的設計更具有普遍性,無法滿足他們的特性需求

個人覺得,像oracle等這種花錢的東西只有不差錢的自己又懶得維護的國企之類的企業才買。一是懶得研發就買現成的,二是壞了有人給修,上門服務,就是不差錢。

4. tidb 好不好用

摘要 TiDB 是一款結合了傳統的關系型資料庫和 NoSQL 資料庫特性的新型分布式資料庫。

5. google為什麼要開源webrtc

google開源webrtc的理由如下:【點擊免費試用,0成本啟動】

WebRTC(Web Real-Time Communication)項目的最終目的主要是讓Web開發者能夠基於瀏覽器(ChromeFireFox...)輕易快捷開發出豐富的實時多媒體應用,而無需下載安裝任何插件,Web開發者也無需關注多媒體的數字信號處理過程,只需編寫簡單的Javascript程序即可實現,W3C等組織正在制定Javascript 標准API,目前是WebRTC 1.0版本,Draft狀態;另外WebRTC還希望能夠建立一個多互聯網瀏覽器間健壯的實時通信的平台,形成開發者與瀏覽器廠商良好的生態環境。同時,Google也希望和致力於讓WebRTC的技術成為HTML5標准之一,可見Google布局之深遠。

想要了解更多關於webrtc的相關信息,推薦咨詢ZEGO即構科技。公司自成立伊始,就專注自研音視頻引擎,在音頻前處理、網路自適應和跨平台兼容性等方面,達到國際一流水平,同時充分利用基礎雲服務商的能力,構建了MSDN海量有序自學習數據網路,服務覆蓋全球,涵蓋上百個音視頻互動業務場景,單日時長突破30億分鍾。

6. 除了安卓,谷歌有哪些用戶熟知的開源項目

谷歌開源項目很多的,下面我列舉幾個我用過的:

  1. Google GFlags

    GFlags是一個命令行標記的處理庫,它可以替代「getopt()」,其內置對C++的支持比如string,十分方便。


  2. Google Glog

    Glog提供強大的日誌處理工具庫,能夠滿足客戶端以及伺服器等多種應用場景,性能高資源消耗低。


  3. ProtoBuf

    ProtoBuf是一種可擴展編碼序列數據的方式,Google在幾乎所有內部RPC協議和文件格式都使用了ProtoBuf。它可以用於很多語言無縫交換數據,是一種很好的通信協議。而且被一些IDE所支持,比如NetBeans。


  4. Chromium

    Chromium是Chrome瀏覽器的開源項目,Chromium的目標是建立一個新一代的強大網路應用程序,它與Chrome有很多不同之處。Chrome以穩定為主,而Chromium以功能驅動為主。


  5. V8 引擎

    V8是Google的開源JavaScript引擎,用C++寫成,用於Chrome瀏覽器之上。V8使用ECMAScript的ECMA-262第三版可運行於Windows XP、Vista、Mac OS 10.5和使用IA-32或ARM處理器的Linux。V8可獨立運行也可嵌入到任何C++程序里使用。


  6. Chromium OS

    Chromium OS是開源版的Chrome OS操作系統,提供快速、簡單而安全的網路體驗。


  7. Google Style Guide

    Google內部的C++編碼規范


  8. GO

    Google開發的新編程語言,具有強大的並發能力,適用於處理海量數據。


  9. Skia

    Skia是一個完整的2D圖形處理庫,用於繪制文字、圖形、圖片等,在Chrome和Android上都有應用。


  10. GoogleTest

    GoogleTest是一個強大適用的C++ 單元測試和性能測試庫,使用易上手。


  11. Fonts

    谷歌提供了自家的所有開源字體,如:Roboto、Open Sans等。


  12. Gson

    Gson是一個Java序列化庫,能夠提供Java對象到Json對象的完美轉換。


  13. LevelDB

    LevelDB是一個key-value資料庫,可以有序存放key和value的映射,性能高。


其他更多好的開源項目請到https://github/google查找


7. 現在的開源圖形資料庫有哪些

首先是MariaDB,它是一個採用Maria存儲引擎的MySQL分支版本,是由原來MySQL的作者 Michael Widenius創辦的公司所開發的免費開源的資料庫伺服器。與MySQL相比較,MariaDB更強的地方在於它擁有更多的引擎,包括Maria存儲引擎、PBXT存儲引擎、XtraDB存儲引擎、FederatedX存儲引擎,它能夠更快的復制查詢處理、運行的速度更快、更好的功能測試以及支持對Unicode的排序等。
其次是rcona,它為MySQL資料庫伺服器進行了改進,在功能和性能上較MySQL有著很顯著的提升。該版本提升了在高負載情況下的InnoDB的性能,同時,它還為DBA提供一些非常有用的性能診斷工具,並且提供很多參數和命令來控制伺服器行為。
第三是Percona Server,它使用了諸如google-mysql-tools、Proven Scaling和 Open Query對MySQL進行改造。並且,它只包含MySQL的伺服器版,並沒有提供相應對 MySQL的Connector和GUI工具進行改進。

8. 怎樣操作leveldb資料庫,實現增刪改查

LevelDB 簡介
一、LevelDB入門

LevelDB是Google開源的持久化KV單機資料庫,具有
很高的隨機寫,順序讀/寫性能,但是隨機讀的性能很一般,也就是說,LevelDB很適合應用在查詢較少,而寫很多的場景。LevelDB應用了LSM
(Log Structured Merge)
策略,lsm_tree對索引變更進行延遲及批量處理,並通過一種類似於歸並排序的方式高效地將更新遷移到磁碟,降低索引插入開銷,關於LSM,本文在後
面也會簡單提及。

根據LevelDB官方網站的描述,LevelDB的特點和限制如下:

特點:
1、key和value都是任意長度的位元組數組;
2、entry(即一條K-V記錄)默認是按照key的字典順序存儲的,當然開發者也可以重載這個排序函數;
3、提供的基本操作介面:Put()、Delete()、Get()、Batch();
4、支持批量操作以原子操作進行;
5、可以創建數據全景的snapshot(快照),並允許在快照中查找數據;
6、可以通過前向(或後向)迭代器遍歷數據(迭代器會隱含的創建一個snapshot);
7、自動使用Snappy壓縮數據;
8、可移植性;


限制:
1、非關系型數據模型(NoSQL),不支持sql語句,也不支持索引;
2、一次只允許一個進程訪問一個特定的資料庫;
3、沒有內置的C/S架構,但開發者可以使用LevelDB庫自己封裝一個server;

LevelDB本身只是一個lib庫,在源碼目錄make編譯即可,然後在我們的應用程序裡面可以直接include leveldb/include/db.h頭文件,該頭文件有幾個基本的資料庫操作介面,下面是一個測試例子:

#include <iostream>
#include <string>
#include <assert.h>
#include "leveldb/db.h"

using namespace std;

int main(void)
{

leveldb::DB *db;
leveldb::Options options;
options.create_if_missing = true;

// open
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());

string key = "name";
string value = "chenqi";

// write
status = db->Put(leveldb::WriteOptions(), key, value);
assert(status.ok());

// read
status = db->Get(leveldb::ReadOptions(), key, &value);
assert(status.ok());

cout<<value<<endl;

// delete
status = db->Delete(leveldb::WriteOptions(), key);
assert(status.ok());

status = db->Get(leveldb::ReadOptions(),key, &value);
if(!status.ok()) {
cerr<<key<<" "<<status.ToString()<<endl;
} else {
cout<<key<<"==="<<value<<endl;
}

// close
delete db;

return 0;
}

上面的例子演示了如何插入、獲取、刪除一條記錄,編譯代碼:


g++ -o test test.cpp libleveldb.a -lpthread -Iinclude

執行./test後,會在/tmp下面生成一個目錄testdb,裡麵包含若干文件:

------------------------------------------------------------
LevelDB
是google開源的一個key-value存儲引擎庫,類似於開源的Lucene索引庫一樣。其他的軟體開發者可以利用該庫做二次開發,來滿足定製需
求。LevelDB採用日誌式的寫方式來提高寫性能,但是犧牲了部分讀性能。為了彌補犧牲了的讀性能,一些人提議使用SSD作為存儲介質。
對於本地化的Key-value存儲引擎來說,簡單的使用一般都分成三個基本的步驟:(1)打開一個資料庫實例;(2)對這個資料庫實例進行插入,修改和查詢操作;(3)最後在使用完成之後,關閉該資料庫。下面將詳細討論該三個步驟:
一、打開一個資料庫實例
一個leveldb資料庫有一個對應一個文件系統目錄的名字。該資料庫的所有內容都存儲在這個目錄下。下面的代碼描述了怎樣打開一個資料庫或者建立一個新的資料庫。

#include <assert.h>
#include "leveldb/db.h"

leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());


如果打開已存在資料庫的時候,需要拋出錯誤。將以下代碼插在leveldb::DB::Open方法前面:
options.error_if_exists = true;

二、對資料庫的簡單讀、寫操作
LevelDB提供了Put,Delete和Get三個方法對資料庫進行修改和查詢。例如,下面的代碼片段描述了怎樣將key1對應的value值,移到key2對應的值。
std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if(s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
if(s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);三、關閉資料庫
在對資料庫進行了一系列的操作之後,需要對資料庫進行關閉。該操作比較簡單:
... open the db as described above...
... do something with db ...
delete db;


上面對levelDB的簡單使用做了基本的介紹,接下來就是如何自己寫一個完成並且能運行的例子。
1、下載源碼 git clone https://code.google.com/p/leveldb/
2、編譯源碼 cd leveldb && make all
3、編寫test.cpp
#include <assert.h>
#include <string.h>
#include <leveldb/db.h>
#include <iostream>

int main(){
leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
assert(status.ok());

//write key1,value1
std::string key="key";
std::string value = "value";

status = db->Put(leveldb::WriteOptions(), key,value);
assert(status.ok());

status = db->Get(leveldb::ReadOptions(), key, &value);
assert(status.ok());
std::cout<<value<<std::endl;
std::string key2 = "key2";

//move the value under key to key2

status = db->Put(leveldb::WriteOptions(),key2,value);
assert(status.ok());
status = db->Delete(leveldb::WriteOptions(), key);

assert(status.ok());

status = db->Get(leveldb::ReadOptions(),key2, &value);

assert(status.ok());
std::cout<<key2<<"==="<<value<<std::endl;

status = db->Get(leveldb::ReadOptions(),key, &value);

if(!status.ok()) std::cerr<<key<<" "<<status.ToString()<<std::endl;
else std::cout<<key<<"==="<<value<<std::endl;

delete db;
return 0;
}4、編譯鏈接 g++ -o test test.cpp ../leveldb/libleveldb.a -lpthread -I../leveldb/include
注意libleveldb.a 和leveldb include的路徑。

5、運行結果./test:
value
key2===value
key NotFound: