如何将数据从Magnolia CMS Apache Jackrabbit内容存储库迁移到普通的SQL SERVER数据库

时间:2016-03-21 14:33:09

标签: sql-server-2012 jackrabbit magnolia

我是Magnolia CMS和Apache Jackrabbit内容存储库概念的新手。

有一个使用Magnolia CMS的Web应用程序。 Magnolia使用SQL SERVER 2012数据库作为持久性管理器。 这里完成了Apache Jackrabbit内容存储库的实现。 Magnolia CMS有两种独立的配置,用于应用程序,称为公共和作者实例。

现在,我们正在尝试使用具有所有功能的自定义ASP.NET MVC 5应用程序替换现有的Magnolia CMS。

我分析了SQL SERVER数据库中的表,发现以Node_ID和Bundle_Data格式存储的数据非常难以分析。 简而言之,要解释起来并不容易。

基于自定义CMS,开发了一个新的作者实例数据库模型(SQL SERVER 2012)。

因此,作为迁移任务的一部分,我尝试将使用Apache Jackrabbit内容存储库实现存储在SQL SERVER中的旧数据迁移到普通的SQL SERVER 2012(根据新的数据库模型)。

任何人都可以帮助我知道是否有任何经过验证的方法或工具可用于完成此任务。

1 个答案:

答案 0 :(得分:2)

关于jackrabbit方面的问题更多,而不是Magnolia方面的问题,特别是因为你想完全取代Magnolia,而不仅仅是持久层:

  

现在我们正在尝试用一个替换现有的Magnolia CMS   具有所有功能的自定义ASP.NET MVC 5应用程序。

虽然我的问题是你是否真的要完全替换Jackrabbit,或者仍然使用Jackrabbit和你的ASP.NET应用程序但是使用MS SQL Server数据存储(这将是我的个人建议)?否则你将摆脱Jackrabbit的所有好处。

Jackrabbit确实支持SQL Server,我建议使用它。

https://wiki.apache.org/jackrabbit/DataStore#Configuration-1

  

目前支持的是:db2,derby,h2,mssql,mysql,oracle,   SQLSERVER。

仅使用ASP.NET和SQL Server开发WebCMS,并且两者之间没有内容存储库层,就像开发WebCMS通常从头开始的所有内容一样,特别是如果您想拥有Magnolia提供的所有功能(版本控制,历史,搜索等。)。

您可以在此处查看有关Jackrabbit数据存储的详细信息:http://wiki.apache.org/jackrabbit/DataStore,但我想知道您或您的客户为何希望将内容存储库的数据存储更改为SQL Server。我想你并不是说使用MySQL来保存元数据,而是真正存储二进制内容(这是一种错误,就像OpenCms,另一种基于Java的开源WebCMS,在他们的架构设计中做出的 - imho)。

请注意,通常大文件不会存储在数据库本身(使用Magnolia),而是存储在文件系统中。

https://wiki.magnolia-cms.com/display/WIKI/Setting+up+a+Jackrabbit+persistence+manager#SettingupaJackrabbitpersistencemanager-Datastorageandbackup

  

当BLOB超过a时,默认情况下不存储在数据库中   在你的Jackrabbit配置中定义了一定的阈值 - 相反   它们保存在文件系统中。 a使用的默认阈值   Magnolia安装是1024字节。所有文件都在定义之上   阈值放在文件系统上而不是数据库中。

如果您真的想完全摆脱Jackrabbit并且只使用SQL Server作为持久层并且无论大小(不推荐)都存储其中的所有二进制内容,我会写一个自定义导出/导入脚本,查询Jackrabbit仓库(标准CMIS协议)并从文件系统获取内容,读取为 FileInputStream 并写入到Oracle DB(例如:http://www.java2s.com/Code/Java/Database-SQL-JDBC/StoreBLOBsdataintodatabase.htm)。这将是我建议的方法

我认为没有任何开箱即用的工具