标签: xml-database

使用Basex在XML中插入数据

我在BaseX中存储了两个XML文档,即医院和办公室.

以下是办公室xml:

<Staff>
    <Employee Name="Brian">
        <Personal>
            <SSN> 666-66-6666 </SSN>
        </Personal>
        <StaffInfo>
            <Position> Doctor </Position>
            <AccountableTo> David </AccountableTo>
        </StaffInfo>
    </Employee>
    <Employee Name="David">
        <Personal>
            <SSN> 555-55-5555 </SSN>
        </Personal>
        <StaffInfo>
            <Position> Doctor </Position>
            <AccountableTo />
        </StaffInfo>
    </Employee>
</Staff>
Run Code Online (Sandbox Code Playgroud)

在这个XML中,我想添加一个或多个员工.如何使用BaseX添加元素?

xquery xml-database xquery-update basex

6
推荐指数
1
解决办法
4496
查看次数

F#数据类型+ SQL-Server持久性(使用No-SQL技术)

我的F#应用程序具有非常好的F#模型,充分利用了F#类型系统(联合,记录,元组和基元类型).我试图找出将这些数据类型保存到SQL-Server数据库的最佳方法.

让我们做出以下假设:

  • 我想要持久化的中心实体是一个被称为的判别联盟,Task它有大约30个不同的联合案例,每个案例具有完全不同的属性(可能是其他的DU,记录或元组或原始类型),这使得使用矩形关系表格实施起来非常繁琐

  • 我希望每周多次不断改进这些模型,CI会在提交后立即将我的应用程序部署到生产中.同样,使用常规表会使ALTER TABLE语句减慢我的开发和部署速度,并且会增加大量的认知过载,任何新开发人员都会在这个系统上遇到挑战

  • 在进行模型演变后,我应该能够轻松地使用后台进程在线升级我的旧模型,或者从数据库中获取时,使用接近0的停机时间

  • 我应该能够在任意深度查询这些模型,并且我已经接近一百万行来处理,并且这将继续增长.查询速度应该很快,最多为100毫秒

  • 我需要使用SQL Server,因为此应用程序是较大系统的一小部分,我希望任何数据库操作都参与任何正在进行的数据库事务


序列化为TaskJSON

这是我的第一次尝试 - 将所有内容存储为JSON,识别可查询值,使用SQL Server 2016的新JSON函数将它们存储在索引表中.SQL Server中的JSON函数非常快,但索引这些查询要求我使用持久+计算+索引列或索引视图.

烦恼:

  • 非常难以进化模型,特别是如果我想要进化所有类型X的实例,这些实例可能出现在不同联合情况的不同深度.没有标准化的语言可以指出这些演变

  • JSON不区分十进制/浮点数/数字,这有时很难处理,我需要自定义格式化程序.小问题,没什么大不了的.

  • 查询语言在任意深度都有些原始,并且这些查询没有索引,因此新查询几乎总是要求我创建计算列或更改索引视图.

  • 将新的索引列添加到索引视图不是ONLINE操作并导致停机,并且很难在CI中自动化

  • 在同一个表中使用PERSISTED COLUMNS有时会导致SQL Server在搜索/选择时没有真正使用它们,而是从头开始重新计算这些值(因为它在查询计划器中没有准确地计算出这个操作的成本)


序列化为TaskXML

这是我目前的实施.

  • 我编写了自己的自定义XML序列化程序,这使我很容易使用XQuery和SQL Server的xml数据类型列查询数据库

  • 使用功能非常强大的XSLT,模型演变变得轻而易举

问题:

  • 即使添加了所有可能的XML索引,查询也很慢 - 大约需要5秒钟(在Azure P6 SQL实例中)
  • 对于不同的持久模型版本,只需略微不同的查询,这会使它更加昂贵
  • 非索引的XML函数非常慢,并且需要永远构建索引表/持久列,所以我不能真正使用它.

我对我的XML解决方案非常满意 - 我只需要一种方法来加快我的XML查询,我想在这一点上,我已经达到了SQL Server可以提供的极限.

还有其他方法我错过了F#社区试图能够持久保存非常丰富的F#数据模型吗?

f# xml-database f#-data

5
推荐指数
0
解决办法
206
查看次数

在日志中快速搜索

我和另一篇文章中描述的人有同样的问题.我的应用程序的日志文件很大(~1GB),而grep用于关联日志文件中的信息非常繁琐.现在我使用''less''工具,但它也比我想要的慢.

我在考虑加快搜索速度.有以下几种方法:首先,用XML生成日志并使用一些XML搜索工具.我不确定使用XML搜索会获得多少加速(我猜不多,因为非索引文件搜索仍需要很长时间).

其次,使用XML数据库.这会更好,但我在这里没有太多背景.

第三,使用(非XML)数据库.这有点单调乏味,因为必须编写表模式(上面的第二个选项也可以完成吗?).我还预见到一开始会改变很多模式以包含常见用例.理想情况下,我想要一个比完整的数据库更轻的东西来存储日志.

第四,使用lucene.它似乎符合目的,但有一种简单的方法来指定当前用例的索引吗?例如,我想说"每当你看到'迭代'这个词时索引".

你有什么意见?

database logging xml-database

4
推荐指数
2
解决办法
1662
查看次数

开源XML数据库的可伸缩性

我们正在寻找一种报告应用程序,该应用程序报告存储在大量XML文件中的数据.~3,000,000个文件,大小从7KB到5MB(每个文件符合相同的模式).我猜大约有200GB的XML.我正在研究一些开源XML数据库(Sedna,BaseX和eXist-db),我不确定这些系统的扩展程度,我在这里阅读了这三个数据库的比较.这是我对可伸缩性的关注源自哪里.

关于我们想要做的事情的一些细节是:我们不会更改任何XML文件中的数据,并且每天都会添加新文件.由于我们关注报告查询性能对我们很重要,因此添加和索引新文件所需的时间对我们来说不是一个高优先级.

我想知道是否有人有类似规模使用这些系统的经验?我查看了BaseX 统计信息页面,看到了一些相当大的XML实例,但没有提到性能.

我们不需要开源产品,MarkLogic系统看起来很适合这个账单,但我很好奇开源产品做了些什么.

xml-database exist-db basex sedna

4
推荐指数
1
解决办法
2068
查看次数