前面写了两篇关于国产数据库的文章,没想到引起了很多网友的热议,其中大部分网友是表示认可、肯定;在此我表示感谢。当然其中也有个别网友朋友提出了质疑和疑问,甚至抵制,这类朋友大致的观点总结一下就是:
1、你们MogDB是基于openGauss数据库的二次开发增强,既然openGauss我用起来感觉不好用,自然MogDB也不好用。 2、openGauss是基于开源PostgreSQL9.2,还是停留在9这个版本,太老了。 3、直接干脆从PostgreSQL不香吗?
针对这几个疑问,我正式回复一下:
1、开源openGauss迭代速度比较快,同时确实存在不少Bug,另外在针对Oracle、MySQL、PostgreSQL方面的兼容性相对要差很多,目前各家DBV厂商都做了很多兼容性增强,包括一些Bug修复,因此稳定性是可以得到保障的。 至于说好不好用,我想大家试试就知道了吧!
2、openGauss是基于PostgreSQL 9.2.4版本没错,但是已经被魔改的很厉害了,架构都完全不同了,而且实事求是的说,现在最新版PostgreSQL17 还有一些没解决的痛点,openGauss 1.0 都解决了,那么,您能说openGauss还停留在PostgreSQL9.2 时代么?
3、我其实在公众号留言也回复过了,如果用户运维能力跟得上,用开源PG也完全没有问题,毕竟确实有很多互联网公司都在用PG,比如去哪儿网、探探、中国平安、苏宁等等。 但是如果用户是要进行数据库国产化改造,那么我想用PostgreSQL来替代Oracle或者DB2又或者是MySQL,应该就不太适合了吧。我想原因就不需要过多解释了。
我们再回到这个主题上来,为什么企业用户选择MogDB来做国产化改造,而不是用开源的openGauss或者PostgreSQL呢?我想大概有如下几个原因:
数据库稳定性、性能、安全等都是经得起考验的,毕竟现在每一个客户投产之前都要经过很长的测试;其次那就是MogDB对于其他数据库的兼容性真的做的还不错,至少是达到用户的预期了吧。
因此我打算用3-5篇系列文章来给大家分享分享MogDB在针对Oracle、MySQL、PostgreSQL等数据库方面的兼容性增强和改进。
实际上兼容性我们做的非常多了,一些场景的数据库类型,SQL写法就不说了,大家可以参考MogDB官网 www.mogdb.io。 这里我简单提几个兼容性的大类。
MogDB 兼容Oracle的函数有哪些?
#字符函数
regexp_substr
regexp_instr
regexp_replace
regexp_count
replace
instrb
soundex
asciistr
unistr
convert
......
# 时间函数
months_between
trunc
round
numtoyminterval
systimestamp
sys_extract_utc
new_time
......
# 数字函数
nanvl
bitor
bitxor
bin_to_num
sinh
cosh
tanh
remainder
round_ties_to_even
.....
# 聚合函数
wm_concat
listagg
bit_and_agg
bit_or_agg
bit_xor_agg
any_value
kurtosis_pop
kurtosis_samp
skewness_pop
skewness_samp
......
# NULL值相关函数
nullif
nvl2
lnnvl
# 其他函数
sys_guid
ora_hash
dump
vsize
to_blob
empty_clob()
nls_charset_name
nls_charset_id
sys_context
userenv
instrb
nls_charset_id
nls_charset_name
nls_lower
nls_upper
ora_hash
remainder
replace
show
show_parameter
to_timestamp,
to_yminterval
tz_offset,
nullif
ratio_to_report
pivot
unpivot
实际上兼容的函数还有很多,我这里就写这么多。 比如Oracle listagg、pivot、unpivot这些都是Oracle 11g才新增加的函数;甚至Oracle 21c新增的分析函数也支持了。
MogDB 兼容Oracle的DBMS包?
实际上很多toB客户都是Oracle的重度使用者,大量使用Oracle内置dbms package、存储过程等等,因此如果我们要进行快速替换、低成本替换,就必须要去兼容一些Oracle dbms内置包,比如如下就是我们已经兼容并支持的部分:
dbms_random
dbms_output
dbms_lock
dbms_lob
dbms_application_info
dbms_metadata
dbms_job
dbms_utility
dbms_stat
dbms_obfuscation_toolkit
dbms_utility
dbms_snapshot
utl_url
utl_raw
utl_match
utl_encode
utl_recomp
.....
MogDB 兼容Oracle DBA_XXX视图和数据字典有哪些?
DBA_CATALOG
DBA_CONS_COLUMNS
DBA_CONSTRAINTS
DBA_DATA_FILES
DBA_DEPENDENCIES
DBA_IND_COLUMNS
DBA_IND_EXPRESSIONS
DBA_IND_PARTITIONS
DBA_IND_STATISTICS
DBA_INDEX_USAGE
DBA_INDEXES
DBA_OBJECTS
DBA_PART_INDEXES
DBA_PART_TABLES
DBA_PROCEDURES
DBA_SEGMENTS
DBA_SEQUENCES
DBA_SOURCE
DBA_SYNONYMS
DBA_TAB_COL_STATISTICS
DBA_TAB_COLS
DBA_TAB_COLUMNS
DBA_TAB_COMMENTS
DBA_COL_COMMENTS