搞数据库的MM

x
xiaohuoche
楼主 (北美华人网)
感觉这里能人很多..不知道有没有mm有经验:
需要将oracle db 的数据, 主要是 CLOB data type(up to 4GB), 移到 sql server db, 但 sql db 只有 varchar(max), up to 2GB. 考虑将一个column 一分为二,用户用数据的时候再合起来, 可行吗? 有mm尝试过吗? 如何split?

先谢谢大家了!
f
fibril
感觉是系统的设计有问题啊。这么大的数据为什么放在关系型数据库里呢?分拆数据不保险。除非能保证所有的数据都能拆分,拆分后每个都不会超过上限。感觉不是好解决办法。
c
chromium
这个split可能一般的刀不管用了吧,可能需要比较锋利的品牌长刀了吧?
H
Hesterhql
stackoverflow上看看

☆ 发自 iPhone 华人一网 1.14.05
x
xiaohuoche
谢谢楼上的mm...数据只是一些text, 但是用户可以 put in unlimited characters...所以用的是 clob data type, 觉得可以split 吧? 我也是第一次需要处理这样的东西。。。
H
Hesterhql
H
Hesterhql
自己先造点数据试一下 我看网上的意思是 2008年之后varchar(max)没有限制

谢谢楼上的mm...数据只是一些text, 但是用户可以 put in unlimited characters...所以用的是 clob data type, 觉得可以split 吧? 我也是第一次需要处理这样的东西。。。
xiaohuoche 发表于 12/13/2019 10:07:41 PM [url=https://forums.huaren.us/showtopic.aspx?topicid=2482845&postid=82125590#82125590][/url]


☆ 发自 iPhone 华人一网 1.14.05
f
fish2006
Json type/object可不可以考虑?
x
xiaohuoche
谢谢楼上的mm 们 :)

看了这个, 好像是variable, 不知道对column 如何?
https://stackoverflow.com/questions/7611394/maximum-size-of-a-varcharmax-variable

“我看网上的意思是 2008年之后varchar(max)没有限制”。。。。找了一下, 没找着。。mm 有链接吗?

"Json type/object可不可以考虑?"...应该不吧。。。谢谢 :)
三十二倍十五榴
VARBINARY(MAX)
x
xiaohuoche
谢谢楼上的mm...这个应该和varchar(max) 差不多 只是。。binary byte strings
c
chromium
感觉都打擦边球,过程,
看一下这一栏现存数据最大的Size, 如果小于2G, 解决
如果有大于2G, 去和程序员用户商量,可以在程序层切分组装吗,如果可以,解决
如果这些都不行,即使切分应用程序也不能透明可用,程序还是要改,转第二步,商量解决
c
country5
该用户帖子内容已被管理员屏蔽
五四三二一
回复 12楼chromium的帖子

不要不懂装懂,改什么程序呀。
不知道你是男是女,是女的还可以原谅,滥竽充数的大妈不缺你一个。

如果是男的,就太丢人了。
country5 发表于 12/14/2019 9:51:33 AM

人家专门问mm,你凑什么热闹
c
country5
该用户帖子内容已被管理员屏蔽
f
fuji4ever
感觉这里能人很多..不知道有没有mm有经验:
需要将oracle db 的数据, 主要是 CLOB data type(up to 4GB), 移到 sql server db, 但 sql db 只有 varchar(max), up to 2GB. 考虑将一个column 一分为二,用户用数据的时候再合起来, 可行吗? 有mm尝试过吗? 如何split?

先谢谢大家了!

xiaohuoche 发表于 12/13/2019 9:48:06 PM

MEDIUMTEXTHolds a string with a maximum length of 16,777,215 characters
三十二倍十五榴
FILESTREAM in SQL SERVER
y
yourworld
你有没有先查下Oracle clob里的最长多少?超过了2GB? ---发自Huaren 官方 iOS APP
行政执法
FILESTREAM Storage
FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. The sizes of the BLOBs are limited only by the volume size of the file system. The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

前辈已经给出了答案。sql server 2008以后都有的feature。另外要注意你的OS系统不要有2G文件size限制,比如几十年前的FAT文件系统。

sql server 2016 以后的 external table应该也是一个思路。
x
xiaohuoche
谢谢楼上的mm...大家多多讨论, 对的,不对的, 都没关系, 大家互相学习 :)

看了一下, filestream 对 parallel dw 不适用啊?
https://docs.microsoft.com/en-us/sql/relational-databases/blob/filestream-sql-server?view=sql-server-ver15

还有。。。是在考虑external table...
一年明月
Oracle的Clob数据类型应当与blob最接近,特点是内容不是in-line storage, 而是存在另外的文件里。这种实现对某些操作有优化的作用。
之前以为楼主要移到MySQL db... SQL server的话好像有好几种选择:

https://docs.microsoft.com/en-us/sql/relational-databases/blob/binary-large-object-blob-data-sql-server?view=sql-server-ver15
c
chromium
人家专门问mm,你凑什么热闹

五四三二一 发表于 12/14/2019 9:59:54 AM


他根本就没明白我说程序要改的意思,和怎样解决这个问题好。数据库存数据,不是独立存在的,都是别的应用来用这个数据库的。这个应该也是,不然谁会人工去自己存和解这些非机构数据column啊。

首先,现在不太讲以前的数据库设计规范式了,因为join和exact search等这些操作少了,很多internet 和 app就把结构化数据放column里。但如果真的把Gb级别字串结构化数据放在数据库一个column, 这个系统设计还是有一定问题比较粗糙的。基于这个假设,很可能这个数据库虽然用了这个数据类型,但真正存的数据size并没这么长,就是当做一个非固定结构字串的存储,然后在应用层去decode用。那第一步就是看看存的数据最大size, 如果根本就没有超过2Gb的。那直接用SQL Seever 一个Varchar 或binary volumn就好了, 最高到2G。

其次,如果真的有点数据超过2G, 系统设计不论,只能分解开到两个或以上SQL Server Column里,或者还是一个column 存reference 把内容存数据库外。这样的话,无论哪种migration 方式,用这个数据库的application 去存或读这个数据的那部分代码都要改。所以最好和那些程序员沟通,看这个数据是用来做什么的,根据这个场景来看怎么migrate最好。

第三,有人会说,那不可以在数据库成完成这些split和decode, 对application来看还是一个和以前一样的column吗?理论上也可能,比如用数据库stored procedure。但从系统设计和性能角度看,这是很不适合的办法。就像第一步讲的,现在趋势是应用层来做这些数据逻辑,因为这样scalability 好,可以分布可以扩展,二是如果数据这么大,用类似stored procedure这些,对数据库资源和性能影响大。

所以才写那个说怎样的步骤比较好。可惜遇到这种或者不太理解系统设计和性能,或者不能全面看问题的,来吐槽。