通過視頻快速了解什么是圖數(shù)據(jù)庫,,以及能給您的業(yè)務(wù)帶來怎樣的幫助
觀看介紹視頻了解悅數(shù)圖數(shù)據(jù)庫的最佳用戶實踐及行業(yè)應(yīng)用,結(jié)合案例場景了解圖應(yīng)用收益
查看真實用戶分享悅數(shù)圖數(shù)據(jù)庫 v5.0 正式發(fā)布:引領(lǐng)標(biāo)準(zhǔn)化,,激發(fā)新動能
查看最新版本介紹萬億級數(shù)據(jù)毫秒級查詢,,打造強(qiáng)大可信的圖技術(shù)底座
高性能:高吞吐低時延
擁有強(qiáng)大的原生圖引擎來提供低延遲的讀寫和高吞吐量,確保高并發(fā)訪問,、快速的圖遍歷和有效的內(nèi)存使用,,將大規(guī)模數(shù)據(jù)場景下的業(yè)務(wù)決策推進(jìn)到實時級
了解更多易擴(kuò)展:線性擴(kuò)縮容,業(yè)務(wù)不斷線
采用 Shared-Nothing 分布式架構(gòu)和計算與存儲分離的設(shè)計,,可以按需在集群中增加更多節(jié)點或服務(wù)而不影響性能,,滿足不同業(yè)務(wù)場景計算存儲容量的不同需求
了解更多安全穩(wěn)定:數(shù)據(jù)備份,多地容災(zāi)部署
支持快照,、全量備份,、增量備份等多種數(shù)據(jù)備份方式,提供同城/異地容災(zāi)和跨集群同步能力,,支持兩地三中心,、三地五中心等部署方案,保證數(shù)據(jù)不丟失和業(yè)務(wù)連續(xù)性
了解更多生態(tài)完善:兼容 OpenCypher 及多種數(shù)據(jù)格式
原生圖查詢語言兼容 OpenCypher,,支持 CSV,、JSON、MySQL,、Hive,、HBase、Kafka,、Pulsar,、Neo4j,、Dgraph 等多種數(shù)據(jù)源導(dǎo)入,,學(xué)習(xí)和遷移成本更低
了解更多「悅數(shù)圖數(shù)據(jù)庫」采用原生分布式架構(gòu)設(shè)計,,支持快速查找海量復(fù)雜數(shù)據(jù)間的關(guān)聯(lián)關(guān)系,,并提供從數(shù)據(jù)導(dǎo)入到工具應(yīng)用的全流程生態(tài)支持及技能培訓(xùn)
查看產(chǎn)品架構(gòu)詳情兼容 C++、Go,、Java,、Python,、Node 以及 ORM、JDBC 等編程語言及方式
#include <atomic>
#include <chrono>
#include <thread>
#include <nebula/client/Config.h>
#include <nebula/client/ConnectionPool.h>
#include <common/Init.h>
int main(int argc, char* argv[]) {
nebula::init(&argc, &argv);
auto address = "127.0.0.1:9669";
if (argc == 2) {
address = argv[1];
}
std::cout << "Current address: " << address << std::endl;
nebula::ConnectionPool pool;
pool.init({address}, nebula::Config{});
auto session = pool.getSession("root", "nebula");
if (!session.valid()) {
return -1;
}
auto result = session.execute("SHOW HOSTS");
if (result.errorCode != nebula::ErrorCode::SUCCEEDED) {
std::cout << "Exit with error code: " << static_cast<int>(result.errorCode) << std::endl;
return static_cast<int>(result.errorCode);
}
std::cout << *result.data;
std::atomic_bool complete{false};
session.asyncExecute("SHOW HOSTS", [&complete](nebula::ExecutionResponse&& cbResult) {
if (cbResult.errorCode != nebula::ErrorCode::SUCCEEDED) {
std::cout << "Exit with error code: " << static_cast<int>(cbResult.errorCode)
<< std::endl;
std::exit(static_cast<int>(cbResult.errorCode));
}
std::cout << *cbResult.data;
complete.store(true);
});
while (!complete.load()) {
std::this_thread::sleep_for(std::chrono::seconds(1));
}
session.release();
return 0;
}
import (
"fmt"
nebula "github.com/vesoft-inc/nebula-go/v3"
)
const (
address = "127.0.0.1"
// The default port of NebulaGraph 2.x is 9669.
// 3699 is only for testing.
port = 3699
username = "root"
password = "nebula"
)
// Initialize logger
var log = nebula.DefaultLogger{}
func main() {
hostAddress := nebula.HostAddress{Host: address, Port: port}
hostList := []nebula.HostAddress{hostAddress}
// Create configs for connection pool using default values
testPoolConfig := nebula.GetDefaultConf()
// Initialize connection pool
pool, err := nebula.NewConnectionPool(hostList, testPoolConfig, log)
if err != nil {
log.Fatal(fmt.Sprintf("Fail to initialize the connection pool, host: %s, port: %d, %s", address, port, err.Error()))
}
// Close all connections in the pool
defer pool.Close()
// Create session
session, err := pool.GetSession(username, password)
if err != nil {
log.Fatal(fmt.Sprintf("Fail to create a new session from connection pool, username: %s, password: %s, %s",
username, password, err.Error()))
}
// Release session and return connection back to connection pool
defer session.Release()
checkResultSet := func(prefix string, res *nebula.ResultSet) {
if !res.IsSucceed() {
log.Fatal(fmt.Sprintf("%s, ErrorCode: %v, ErrorMsg: %s", prefix, res.GetErrorCode(), res.GetErrorMsg()))
}
}
{
// Prepare the query
createSchema := "CREATE SPACE IF NOT EXISTS basic_example_space(vid_type=FIXED_STRING(20)); " +
"USE basic_example_space;" +
"CREATE TAG IF NOT EXISTS person(name string, age int);" +
"CREATE EDGE IF NOT EXISTS like(likeness double)"
// Excute a query
resultSet, err := session.Execute(createSchema)
if err != nil {
fmt.Print(err.Error())
return
}
checkResultSet(createSchema, resultSet)
}
// Drop space
{
query := "DROP SPACE IF EXISTS basic_example_space"
// Send query
resultSet, err := session.Execute(query)
if err != nil {
fmt.Print(err.Error())
return
}
checkResultSet(query, resultSet)
}
fmt.Print("
")
log.Info("Nebula Go Client Basic Example Finished")
}
NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig();
nebulaPoolConfig.setMaxConnSize(10);
List<HostAddress> addresses = Arrays.asList(new HostAddress("127.0.0.1", 9669),
new HostAddress("127.0.0.1", 9670));
NebulaPool pool = new NebulaPool();
pool.init(addresses, nebulaPoolConfig);
Session session = pool.getSession("root", "nebula", false);
session.execute("SHOW HOSTS;");
session.release();
pool.close();
from nebula3.gclient.net import ConnectionPool
from nebula3.Config import Config
# define a config
config = Config()
config.max_connection_pool_size = 10
# init connection pool
connection_pool = ConnectionPool()
# if the given servers are ok, return true, else return false
ok = connection_pool.init([('127.0.0.1', 9669)], config)
# option 1 control the connection release yourself
# get session from the pool
session = connection_pool.get_session('root', 'nebula')
# select space
session.execute('USE nba')
# show tags
result = session.execute('SHOW TAGS')
print(result)
# release session
session.release()
# option 2 with session_context, session will be released automatically
with connection_pool.session_context('root', 'nebula') as session:
session.execute('USE nba')
result = session.execute('SHOW TAGS')
print(result)
# close the pool
connection_pool.close()
// ESM
import { createClient } from '@nebula-contrib/nebula-nodejs'
// CommonJS
// const { createClient } = require('@nebula-contrib/nebula-nodejs')
// Connection Options
const options = {
servers: ['ip-1:port','ip-2:port'],
userName: 'xxx',
password: 'xxx',
space: 'space name',
poolSize: 5,
bufferSize: 2000,
executeTimeout: 15000,
pingInterval: 60000
}
// Create client
const client = createClient(options)
// Execute command
// 1. return parsed data (recommend)
const response = await client.execute('GET SUBGRAPH 3 STEPS FROM -7897618527020261406')
// 2. return nebula original data
const responseOriginal = await client.execute('GET SUBGRAPH 3 STEPS FROM -7897618527020261406', true)
國產(chǎn)信創(chuàng)支持:擁有華為鯤鵬,、歐拉 OS 認(rèn)證以及飛騰、龍芯,、麒麟 OS 等多個芯片/服務(wù)器/操作系統(tǒng)的國產(chǎn)化支持
多項權(quán)威認(rèn)證:通過 ISO27001,、ISO9001、CMMI3 認(rèn)證,,中國信通院 圖數(shù)據(jù)庫/圖計算基礎(chǔ)和高級能力專項評測