我是arangodb的新手,我正在考虑用arangodb做一个小的应用程序。
因为应用程序将使用无代码平台编写,所以对arangodb的访问将仅通过发布REST API来完成。它将没有直接访问的驱动程序。
此应用程序的用户需要能够使用应用程序前端创建集合和导入CSV文件。
我已经看到可以使用REST API发出AQL命令。但是AQL没有数据定义功能,因此我不能创建一个集合(或者使用SQL术语,DROP或ALTER)。同样,也没有AQL命令来导入CSV。
问题1:我可以发布REST API来创建/更改/删除集合并导入CSV文件中存储的顶点和边吗?
问题2:如果对问题1的回答是肯定的,是否有任何文档说明了如何执行所有这些操作?
提前感谢!
1条答案
按热度按时间2hh7jdfx1#
很高兴您看到了这种设计,数据层具有REST API前端的主要优势是,它允许您验证进入其中的数据。
ArangoDB通过其Foxx微服务特性支持这种开箱即用。
Foxx服务能够挂载REST API端点(非常类似于Express在Node.js中的做法),然后您可以在Foxx中编写代码,对传入的数据执行任何级别的检查。
因为Foxx是用JavaScript编写的(与最新的Node.js中的JavaScript略有不同,例如,它不支持Promises、Async/Await),所以您可以编写代码来执行安全检查、模式验证、底层ArangoDB集合的管理,甚至启动对接收到的命令做出React的带外进程。
您可以让Foxx通过访问文件系统来加载CSV文件,但我强烈建议您不要使用该路径,因为Foxx服务生命周期是由ArangoDB而不是由您的代码管理的。
更好的做法是编写一个Foxx微服务,它公开了一个API,该API能够接受一个JSON有效负载,该负载表示您要导入的数据。然后Foxx可以执行数据验证,确定每个字段的数据类型,对数据中缺少的值做出响应,并可以选择拒绝结构不正确的数据。
您还没有提到CSV文件有多大,以及文件中数据的结构/模式有多广为人知。
您还需要考虑解析、格式化、错误检查和插入要发送的数据需要多长时间(以毫秒为单位)。
请考虑您的数据将如何存储,例如,1个CSV行是否为集合中的1个文档?您是否知道CSV行的唯一键是什么?当发现重复行时,您将如何处理更新?
如果数据以千字节为单位,并且处理数据的时间小于1秒,则只需在JSON有效负载中将其发送到端点。
如果数据以兆字节为单位,则让客户端代码对数据进行切片,并将其发送到对您的用例有效的块中的REST API(例如,每个调用应该花费〈1秒的时间来处理)。
如果数据太大,发送所有数据需要超过30秒,或者最终用户在数据输入之前就放弃了,那么您可能需要在客户端和Foxx之间使用另一个端点,该端点负责将数据保存到磁盘,并生成工作进程,然后将数据切片并提供给Foxx。
数据模型越复杂,需要处理的问题就越多,所以一开始就保持简单。
小的CSV文件可以在JSON有效负载中发送到Foxx微服务,Foxx将从那里处理验证和数据库更新。