高效企业资源管理平台——OpenTenBase全面解读

更新:10-29 民间故事 我要投稿 纠错 投诉

其实高效企业资源管理平台——OpenTenBase全面解读的问题并不复杂,但是又很多的朋友都不太了解,因此呢,今天小编就来为大家分享高效企业资源管理平台——OpenTenBase全面解读的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

OpenTenBase采用分布式集群架构(如下图)。该架构以无共享模式分布。节点是独立的并处理自己的数据。处理后的结果可以向上层汇总或者在节点之间传输。各处理单元通过网络协议进行通信,具有较好的并行处理和扩展能力。这也意味着只需要一台简单的x86服务器就可以部署OpenTenBase数据库集群。

下面简单介绍一下OpenTenBase的三大模块。

Coordinator:协调节点(简称CN)

业务接入门户负责数据分发和查询规划。多个节点位置相等,每个节点提供相同的数据库视图。从功能上来说,CN只存储系统的全局元数据,不存储实际的业务数据。

Datanode:数据节点(简称DN)

每个节点还存储业务数据的碎片。从功能上来说,DN节点负责完成协调节点分发的执行请求。

GTM: 全局事务管理器

负责管理集群事务信息,管理集群的全局对象,如序列等。

本文将详细介绍如何从源码开始,完成OpenTenBase V2.6的编译和安装过程。

1、安装准备和规划

1.1 环境要求

在开始编译之前,请确保您的系统满足以下要求:

•操作系统:TencentOS 2、TencentOS 3、OpenCloudOS、CentOS 7、CentOS 8、Ubuntu

•内存:至少4GB RAM

•磁盘空间:至少10GB,足够的磁盘空间用于源代码下载、编译和安装

1.2 软件环境

软件名称软件版本

Kylin服务器操作系统kylin_v10

OpenTenBaseV2.6

1.3 集群规划

集群规划

下面是两台服务器上1GTM主、1GTM备份、2CN主(CN主相等,所以不需要备份CN)、2DN主、2DN备份的集群。此集群是具备容灾能力的最低配置。

机器1:192.168.2.136

机器2:192.168.2.137

集群规划如下:

节点名称IP 数据目录

GTM master192.168.2.136/data/opentenbase/data/gtm

GTM Slave192.168.2.137/data/opentenbase/data/gtm

CN1192.168.2.136/data/opentenbase/data/coord

CN2192.168.2.137/data/opentenbase/data/coord

DN1 master192.168.2.136/data/opentenbase/data/dn001

DN1 从站192.168.2.137/data/opentenbase/data/dn001

DN2 master192.168.2.137/data/opentenbase/data/dn002

DN2 从站192.168.2.136/data/opentenbase/data/dn002

2.安装依赖

根据您的操作系统,使用以下命令安装必要的依赖项:

对于基于Red Hat 的系统(例如CentOS):

dnf -y install gcc make readline-devel zlib-devel openssl-devel uuid-devel bison flex git

对于基于Debian 的系统(例如Ubuntu):

sudo apt-get 更新

sudo apt-get -y install gcc make libreadline-dev zlib1g-dev libssl-dev libossp-uuid-dev bison flex git

3.创建OpenTenBase用户

所有需要安装OpenTenBase集群的机器上都需要创建opentenbase用户,并设置相应的目录权限。

#创建opentenbase用户

useradd -d /data/opentenbase -s /bin/bash -m opentenbase

#设置密码

密码opentenbase

--mko0-pl,

4.获取安装包

4.1 使用git获取源代码

创建软件目录

[根]

mkdir /dbsoft

使用git 克隆OpenTenBase 源代码存储库:

克隆源代码(root用户)

git 克隆https://github.com/OpenTenBase/OpenTenBase

4.2 下载源码包

登录git并下载最新的v2.6.0版本

https://github.com/OpenTenBase/OpenTenBase/tags

5.编译源码

5.1 配置安装环境变量

所有节点都需要运行

mkdir -p /data/opentenbase/{安装,dbsoft}

chown -R opentenbase:opentenbase /数据/opentenbase

5.2 编译安装

将源码包移动到源码目录

#复制安装包

cp /dbsoft/OpenTenBase-2.6.0.tar.gz /data/opentenbase/dbsoft

减压

tar -zxvf OpenTenBase-2.6.0.tar.gz

进入源码目录并编译:

#进入源码目录

/data/opentenbase/dbsoft/OpenTenBase-2.6.0

#赋予配置脚本执行权限

chmod +x 配置*

#配置编译选项

./configure --prefix=/data/opentenbase/install/opentenbase_bin_v2.6 --enable-user-switch --with-openssl --with-ossp-uuid CFLAGS=-g

#编译并安装软件

使干净

使-sj 4

进行安装

#contrib目录下编译工具

光盘贡献

使-sj 4

进行安装

6. 集群初始化

6.1 禁用SELinux和防火墙(可选)

--关闭selinux

vi /etc/selinux/config

# 禁用SELinux,将SELINUX=enforcing 更改为SELINUX=disabled

--关闭防火墙

systemctl 禁用防火墙

systemctl 停止防火墙

6.2.配置SSH

相互信任为了方便后续操作,建议opentenbase机器之间配置SSH互信:

[开放数据库]

#切换opentenbase用户

超开放数据库

# 192.168.2.136 生成SSH密钥对

ssh-keygen-trsa

# 将公钥复制到其他节点

ssh-copy-id -i ~/.ssh/id_rsa.pub opentenbase@192.168.2.136

ssh-copy-id -i ~/.ssh/id_rsa.pub opentenbase@192.168.2.137

6.3.配置opentenbase环境变量

集群中所有机器都需要配置

[开放数据库]

$ vim ~/.bashrc

导出OPENTENBSE_HOME=/data/opentenbase/install/opentenbase_bin_v2.6

导出路径=$OPENTENBase_HOME/bin:$PATH

导出LD_LIBRARY_PATH=$OPENTENBASE_HOME/lib:${LD_LIBRARY_PATH}

导出LC_ALL=C

6.4.配置根环境变量

集群中的所有机器都需要进行配置。将opentenbase用户的$PATH环境变量添加到/etc/environment中。

[根]

猫/etc/环境

路径=/data/opentenbase/install/opentenbase_bin_v2.6/bin:/data/opentenbase/.local/bin:/data/opentenbase/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

6.5.初始化pgxc_ctl.conf文件

[开放数据库]

mkdir /data/opentenbase/pgxc_ctl

cd /data/opentenbase/pgxc_ctl

vim pgxc_ctl.conf

下面是根据上面介绍的IP、端口、数据库目录、二进制目录等规划编写的pgxc_ctl.conf文件。

pgxc_ctl.conf配置如下:

#!/bin/bash

#DoubleNodeConfig

#主要调整IP地址

IP_1=192.168.2.136

IP_2=192.168.2.137

pgxcInstallDir=/data/opentenbase/install/opentenbase_bin_v2.6

pgxcOwner=opentenbase

默认数据库=postgres

pgxcUser=$pgxcOwner

tmp目录=/tmp

localTmpDir=$tmpDir

配置备份=n

configBackupHost=pgxc-链接器

configBackupDir=$HOME/pgxc

configBackupFile=pgxc_ctl.bak

#----GTM ----------

gtm名称=gtm

gtmMasterServer=$IP_1

gtm主端口=50001

gtmMasterDir=/data/opentenbase/data/gtm

gtmExtraConfig=无

gtmMasterSpecificExtraConfig=无

gtm从=y

gtmSlaveServer=$IP_2

gtm从端口=50001

gtmSlaveDir=/data/opentenbase/data/gtm

gtmSlaveSpecificExtraConfig=无

#----协调员--------

coordMasterDir=/数据/opentenbase /数据/坐标

coordArchLogDir=/data/opentenbase/data/coord_archlog

坐标名称=(cn001 cn002 )

坐标端口=(30004 30004)

池端口=(31110 31110)

坐标PgHbaEntries=(0.0.0.0/0)

coordMasterServers=($IP_1 $IP_2)

coordMasterDirs=($coordMasterDir $coordMasterDir)

坐标MaxWALsernd=2

coordMaxWALsenders=($coordMaxWALsernder $coordMaxWALsender )

坐标从=n

坐标从同步=n

coordArchLogDirs=($coordArchLogDir $coordArchLogDir)

coordExtraConfig=coordExtraConfig

猫$coordExtraConfig

# 添加到所有协调器postgresql.conf

# Original: $coordExtraConfig

include_if_exists="/data/opentenbase/global/global_opentenbase.conf"

wal_level=副本

wal_keep_segments=256

max_wal_senders=4

存档模式=打开

存档超时=1800

archive_command="回显0"

log_truncate_on_rotation=打开

log_filename="postgresql-%M.log"

log_rotation_age=4小时

log_rotation_size=100MB

热备=开

wal_sender_timeout=30 分钟

wal_receiver_timeout=30分钟

共享缓冲区=1024MB

最大池大小=2000

log_statement="ddl"

log_destination="csvlog"

日志记录收集器=打开

log_directory="pg_log"

监听地址="*"

最大连接数=2000

EOF

coordSpecificExtraConfig=(无无)

坐标ExtraPgHba=坐标ExtraPgHba

猫$coordExtraPgHba

本地所有所有信任

托管所有所有0.0.0.0/0 信任

主机复制全部0.0.0.0/0信任

托管所有所有:1/128 信任

主机复制全部:1/128 信任

EOF

coordSpecificExtraPgHba=(无无)

坐标附加从属=n

cad1_Sync=n

#---- 数据节点--------------------------------------

dn1MstrDir=/data/opentenbase/data/dn001

dn2MstrDir=/data/opentenbase/data/dn002

dn1SlvDir=/data/opentenbase/data/dn001

dn2SlvDir=/data/opentenbase/data/dn002

dn1ALDir=/data/opentenbase/data/datanode_archlog

dn2ALDir=/data/opentenbase/data/datanode_archlog

主数据节点=dn001

数据节点名称=(dn001 dn002)

数据节点端口=(40004 40004)

datanodePoolerPorts=(41110 41110)

datanodePgHbaEntries=(0.0.0.0/0)

datanodeMasterServers=($IP_1 $IP_2)

datanodeMasterDirs=($dn1MstrDir $dn2MstrDir)

dnWALSndr=4

datanodeMaxWALSenders=($dnWALSndr $dnWALSndr)

数据节点从=y

datanodeSlaveServers=($IP_2 $IP_1)

datanodeSlavePorts=(50004 54004)

datanodeSlavePoolerPorts=(51110 51110)

数据节点SlaveSync=n

datanodeSlaveDirs=($dn1SlvDir $dn2SlvDir)

datanodeArchLogDirs=($dn1ALDir/dn001 $dn2ALDir/dn002)

datanodeExtraConfig=datanodeExtraConfig

猫$datanodeExtraConfig

# 添加到所有协调器postgresql.conf

# Original: $datanodeExtraConfig

include_if_exists="/data/opentenbase/global/global_opentenbase.conf"

监听地址="*"

wal_level=副本

wal_keep_segments=256

max_wal_senders=4

存档模式=打开

存档超时=1800

archive_command="回显0"

log_directory="pg_log"

日志记录收集器=打开

log_truncate_on_rotation=打开

log_filename="postgresql-%M.log"

log_rotation_age=4小时

log_rotation_size=100MB

热备=开

wal_sender_timeout=30 分钟

wal_receiver_timeout=30分钟

共享缓冲区=1024MB

最大连接数=4000

最大池大小=4000

log_statement="ddl"

log_destination="csvlog"

wal_buffers=1GB

EOF

datanodeSpecificExtraConfig=(无无)

datanodeExtraPgHba=datanodeExtraPgHba

猫$datanodeExtraPgHba

本地所有所有信任

托管所有所有0.0.0.0/0 信任

主机复制全部0.0.0.0/0信任

托管所有所有:1/128 信任

主机复制全部:1/128 信任

EOF

datanodeSpecificExtraPgHba=(无无)

数据节点AdditionalSlaves=n

walArchive=n

6.5.分发二进制包

在一个节点配置完配置文件后,使用pgxc_ctl工具将二进制包部署到所有节点:

6.6.初始化集群

使用pgxc_ctl工具初始化集群:

pgxc_ctl -c /data/opentenbase/pgxc_ctl/pgxc_ctl.conf

#初始化集群

pgxc_ctl 全部初始化

初始化日志。忽略

2024-10-10 03:53:35.680 GMT [64489,coord(0.0)] LOG: 跳过丢失的配置文件"/data/opentenbase/global/global_opentenbase.conf"

2024-10-10 03:53:35.680 GMT [64489,coord(0.0)] LOG: 跳过丢失的配置文件"/data/opentenbase/global/global_opentenbase.conf"

2024-10-10 11:53:35.682 CST [64489,coord(0.0)] LOG: 监听IPv4 地址“0.0.0.0”,端口50004

2024-10-10 11:53:35.682 CST [64489,coord(0.0)] LOG: 监听IPv6 地址“:”,端口50004

2024-10-10 11:53:35.683 CST [64489,coord(0.0)] LOG: 正在Unix 套接字"/tmp/.s.PGSQL.50004" 上侦听

2024-10-10 11:53:44.803 CST [64489,coord(0.0)] LOG: init 提交shmem。

2024-10-10 11:53:50.550 CST [64489,coord(0.0)] LOG: 无法打开文件“global/pg_crypt_key.map”:没有用于bufFile 合并的此类文件或目录。

2024-10-10 11:53:50.550 CST [64489,坐标(0.0)] LOG:开始rel crypt加载映射文件

2024-10-10 11:53:50.550 CST [64489,coord(0.0)] LOG: 无法打开文件“global/pg_rel_crypt.map”:没有用于bufFile 合并的文件或目录。

2024-10-10 11:53:50.550 CST [64489,coord(0.0)] LOG: 结束rel crypt 加载映射文件

2024-10-10 11:53:58.003 CST [64489,coord(0.0)] LOG: 将日志输出重定向到日志记录收集器进程

2024-10-10 11:53:58.003 CST [64489,coord(0.0)] HINT: 未来的日志输出将出现在目录“pg_log”中。

20

24-09-06 19:34:20.971 GMT [220835,coord(0.0)] LOG:  skipping missing configuration file "/data/opentenbase/global/global_opentenbase.conf" 2024-09-06 19:34:20.971 GMT [220835,coord(0.0)] LOG:  skipping missing configuration file "/data/opentenbase/global/global_opentenbase.conf" 2024-09-07 03:34:20.972 CST [220835,coord(0.0)] LOG:  listening on IPv4 address "0.0.0.0", port 54004 2024-09-07 03:34:20.973 CST [220835,coord(0.0)] LOG:  listening on IPv6 address "::", port 54004 2024-09-07 03:34:20.973 CST [220835,coord(0.0)] LOG:  listening on Unix socket "/tmp/.s.PGSQL.54004" 2024-09-07 03:34:20.974 CST [220835,coord(0.0)] FATAL:  could not map anonymous shared memory: Cannot allocate memory 2024-09-07 03:34:20.974 CST [220835,coord(0.0)] HINT:  This error usually means that PostgreSQL"s request for a shared memory segment exceeded available memory, swap space, or huge pages. To reduce the request size (currently 5500862692 bytes), reduce PostgreSQL"s shared memory usage, perhaps by reducing shared_buffers or max_connections. 2024-09-07 03:34:20.974 CST [220835,coord(0.0)] LOG:  database system is shut down pg_ctl: could not start server

Examine the log output. Done. ALTER NODE cn001 WITH (HOST="192.168.2.136", PORT=30004); ALTER NODE CREATE NODE cn002 WITH (TYPE="coordinator", HOST="192.168.2.137", PORT=30004); CREATE NODE CREATE NODE dn001 WITH (TYPE="datanode", HOST="192.168.2.136", PORT=40004, PRIMARY, PREFERRED); CREATE NODE CREATE NODE dn002 WITH (TYPE="datanode", HOST="192.168.2.137", PORT=40004); CREATE NODE SELECT pgxc_pool_reload();  pgxc_pool_reload   t (1 row) CREATE NODE cn001 WITH (TYPE="coordinator", HOST="192.168.2.136", PORT=30004); CREATE NODE ALTER NODE cn002 WITH (HOST="192.168.2.137", PORT=30004); ALTER NODE CREATE NODE dn001 WITH (TYPE="datanode", HOST="192.168.2.136", PORT=40004, PRIMARY); CREATE NODE CREATE NODE dn002 WITH (TYPE="datanode", HOST="192.168.2.137", PORT=40004, PREFERRED); CREATE NODE SELECT pgxc_pool_reload();  pgxc_pool_reload   t (1 row) Done. EXECUTE DIRECT ON (dn001) "CREATE NODE cn001 WITH (TYPE=""coordinator"", HOST=""192.168.2.136"", PORT=30004)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn001) "CREATE NODE cn002 WITH (TYPE=""coordinator"", HOST=""192.168.2.137"", PORT=30004)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn001) "ALTER NODE dn001 WITH (TYPE=""datanode"", HOST=""192.168.2.136"", PORT=40004, PRIMARY, PREFERRED)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn001) "CREATE NODE dn002 WITH (TYPE=""datanode"", HOST=""192.168.2.137"", PORT=40004, PREFERRED)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn001) "SELECT pgxc_pool_reload()";  pgxc_pool_reload   t (1 row) EXECUTE DIRECT ON (dn002) "CREATE NODE cn001 WITH (TYPE=""coordinator"", HOST=""192.168.2.136"", PORT=30004)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn002) "CREATE NODE cn002 WITH (TYPE=""coordinator"", HOST=""192.168.2.137"", PORT=30004)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn002) "CREATE NODE dn001 WITH (TYPE=""datanode"", HOST=""192.168.2.136"", PORT=40004, PRIMARY, PREFERRED)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn002) "ALTER NODE dn002 WITH (TYPE=""datanode"", HOST=""192.168.2.137"", PORT=40004, PREFERRED)"; EXECUTE DIRECT EXECUTE DIRECT ON (dn002) "SELECT pgxc_pool_reload()";  pgxc_pool_reload   t (1 row) Done. 6.7. 查看集群状态 [opentenbase@db1 pgxc_ctl]$ pgxc_ctl -c /data/opentenbase/pgxc_ctl/pgxc_ctl.conf  # 启动集群 pgxc_ctl monitor all 日志如下 Running: gtm master Running: gtm slave Running: coordinator master cn001 Running: coordinator master cn002 Running: datanode master dn001 Running: datanode slave dn001 Running: datanode master dn002 Not running: datanode slave dn002 6.8. 安装错误处理 1)日志查看 一般init集群出错,终端会打印出错误日志,通过查看错误原因,更改配置即可,或者可以通过/data/opentenbase/pgxc_ctl/pgxc_log路径下的错误日志查看错误,排查配置文件的错误 [opentenbase@db1 ~]$ cd ~/pgxc_ctl/pgxc_log/ [opentenbase@db1 pgxc_log]$ ll total 1052 -rw-r--r-- 1 opentenbase opentenbase   2585 Sep  7 03:19 213564_pgxc_ctl.log -rw-r--r-- 1 opentenbase opentenbase    767 Sep  7 03:20 213793_pgxc_ctl.log -rw-r--r-- 1 opentenbase opentenbase    749 Sep  7 03:20 213805_pgxc_ctl.log -rw-r--r-- 1 opentenbase opentenbase 477889 Sep  7 03:22 213813_pgxc_ctl.log -rw-r--r-- 1 opentenbase opentenbase 584714 Sep  7 03:41 214355_pgxc_ctl.log 2)清理集群重新安装 通过运行 pgxc_ctl 工具,执行clean all命令删除已经初始化的文件,修改pgxc_ctl.conf文件,重新执行init all命令重新发起初始化。 [opentenbase@db1 pgxc_ctl]$ pgxc_ctl -c /data/opentenbase/pgxc_ctl/pgxc_ctl.conf  #PGXC clean all 3) 常见问题 执行inti all时,提示pg_ctl命令找不到 这样的问题,通常是环境变量的问题,通过root用户配置/etc/environment 解决 [root] $ cat /etc/environment  PATH=/data/opentenbase/install/opentenbase_bin_v2.6/bin:/data/opentenbase/.local/bin:/data/opentenbase/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin 执行inti all时,提示无法创建目录 mkdir: cannot create directory "/data/opentenbase": Permission denied 这样的问题,通常是分发节点上,没有创建对应的目录 解决方案:检查所有节点的目录配置,如果没有创建,创建即可。 mkdir -p /data/opentenbase/{install,dbsoft} chown -R opentenbase:opentenbase /data/opentenbase 七、集群访问 访问OpenTenBase集群和访问单机的PostgreSQL基本上无差别,我们可以通过任意一个CN访问数据库集群:例如通过连接CN节点select pgxc_node表即可查看集群的拓扑结构(当前的配置下备机不会展示在pgxc_node中),在Linux命令行下通过psql访问的具体示例如下 7.1 登录cn主节点 [opentenbase@db1 pgxc_log]$ psql -h 192.168.2.136 -p 30004 -d postgres -U opentenbase psql (PostgreSQL 10.0 OpenTenBase V2) Type "help" for help. postgres=#  7.2 使用数据库前需要创建default group以及sharding表 OpenTenBase使用datanode group来增加节点的管理灵活度,要求有一个default group才能使用,因此需要预先创建;一般情况下,会将节点的所有datanode节点加入到default group里 另外一方面,OpenTenBase的数据分布为了增加灵活度,加了中间逻辑层来维护数据记录到物理节点的映射,我们叫sharding,所以需要预先创建sharding,命令如下: postgres=# create default node group default_group  with (dn001,dn002); CREATE NODE GROUP postgres=# create sharding group to group default_group; CREATE SHARDING GROUP 7.3 创建数据库,用户,创建表,增删查改等操作 postgres=# create database test; CREATE DATABASE postgres=# create user test with password "test"; CREATE ROLE postgres=# alter database test owner to test; ALTER DATABASE postgres=# c test test You are now connected to database "test" as user "test". test=>create table foo(id bigint, str text) distribute by shard(id); CREATE TABLE test=>insert into foo values(1, "tencent"), (2, "shenzhen"); COPY 2 test=>select * from foo;  id |   str     ----+----------   1 | tencent   2 | shenzhen (2 rows) 八、集群启停 8.1 停止集群 [opentenbase@db1 pgxc_ctl]$ pgxc_ctl -c /data/opentenbase/pgxc_ctl/pgxc_ctl.conf  PGXC stop all -m fast 停止日志 Stopping all the coordinator masters. Stopping coordinator master cn001. Stopping coordinator master cn002. Done. Stopping all the datanode slaves. Stopping datanode slave dn001. Stopping datanode slave dn002. pg_ctl: PID file "/data/opentenbase/data/dn002/postmaster.pid" does not exist Is server running? Authorized users only. All activities may be monitored and reported. Authorized users only. All activities may be monitored and reported. Stopping all the datanode masters. Stopping datanode master dn001. Stopping datanode master dn002. Done. Stop GTM slave waiting for server to shut down.... done server stopped Stop GTM master waiting for server to shut down.... done server stopped 8.2 启动集群 [opentenbase@db1 pgxc_ctl]$ pgxc_ctl -c /data/opentenbase/pgxc_ctl/pgxc_ctl.conf  PGXC start all

用户评论

。婞褔vīp

这个名字听起来很酷!

    有6位网友表示赞同!

打个酱油卖个萌

看起来是一个新兴的技术或平台?

    有12位网友表示赞同!

情字何解ヘ

Wonder if this is about blockchain or something.

    有19位网友表示赞同!

柠栀

Open源项目?我喜欢的类型!

    有11位网友表示赞同!

々爱被冰凝固ゝ

应该是个基础设施吧?

    有10位网友表示赞同!

苏莫晨

TenBase 是什么缩写呢?搞不清楚。

    有16位网友表示赞同!

话少情在

Open 的话一定有很强的社区支持。

    有20位网友表示赞同!

堕落爱人!

希望它简单易用,方便每个人使用。

    有9位网友表示赞同!

寒山远黛

有没有详细介绍或者官网可以了解一下?

    有19位网友表示赞同!

_心抽搐到严重畸形っ°

新兴技术总是让人充满期待!

    有17位网友表示赞同!

安好如初

如果能解决实际问题,那就真棒了。

    有8位网友表示赞同!

冷落了♂自己·

不知道它与其他现有平台有什么区别?

    有7位网友表示赞同!

孤者何惧

会不会是一个开源的数据库或工具库?

    有20位网友表示赞同!

命该如此

名字很有未来感的科技感!

    有17位网友表示赞同!

又落空

期待这个项目能带来新的可能性!

    有16位网友表示赞同!

無極卍盜

听起来很专业,感觉是为开发者打造的平台。

    有11位网友表示赞同!

古巷青灯

会不会是一个学习新技术的社区?

    有14位网友表示赞同!

经典的对白

希望以后能了解更多它的信息和实际应用!

    有14位网友表示赞同!

反正是我

总觉得这个名字很有创意,让人感到好奇/

    有13位网友表示赞同!

【高效企业资源管理平台——OpenTenBase全面解读】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:淘宝店铺粉丝购买、涨粉策略及粉丝价值解析 下一篇:《木偶奇遇记》共读心得:培养孩子成长的关键品质