问题标签 [polyglot-persistance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1899 浏览

design-patterns - Specification pattern and DDD

Within the context of a personal play project for learning more about DDD patterns, I am missing a Specification object for my filters.

Looking around for examples, it seems that everything (like LinQ) is oriented towards SQL databases. However with many NoSQL databases most queries, even just a "select * from table" requires a predefined view. Nevertheless, if the repository is mapping a web service even the type of queries is much more rigid.

Are there variations of the Specification pattern taking into account the limitations of non SQL databases? I have the feeling that this would require the use of inheritance and static declarations to support different type of persistence backends.

How should I combine "sorting" and "filtering" in my repositories? As an example consider the repository for a list of Order items.

So these are different type of sorting when displayed by a table. Since I might handle large results, I never considered sorting or filtering in my views or view models. Initially I thought about a Proyection class that selects the right query from a repository according the user actions. However this does not work well if I want to combine different sort strategies along different filters.

Obviously I need some type of "specification" object, but I am not sure if:

  1. Should I use them for my repositories, making them smarter? Or should I use them for my view models?
  2. How can properly restrict my specification objects for a good polyglot persistence?

Originally I thought about performing any query with a Repository acting as a collection-like interface but now I am noticing that a view model may also behave as "stateful" collection-like interface while the former are "stateless" collection-like interfaces.

  1. Overall should I try to keep any type of sorting/filtering inside my repositories? It seems that doing so, might add unnecessary complexity if all the query results can be loaded into memory.

UPDATE: To spice up this question, consider also that although NoSQL views can be filtered and sorted, a full text search might need an external indexing engine such as Lucene or SQLite-FTS providing only the unique identity of the Entities for a query that must be sorted and filtered again.

0 投票
1 回答
628 浏览

ruby-on-rails - Rails 或 Sinatra 作为 NoSQL 和 DDD 项目的 Web 框架?

我正在评估 Rails 作为新 Web 项目的框架。我唯一担心的是,据我所知,Rails 在构建时非常倾向于 CRUD 和 SQL 应用程序。

我的应用程序的架构风格将使用 NoSQL 数据库进行域驱动,这与 Rails 的根源几乎相反。我还觉得 Rails 应用程序与单个数据库紧密相关。

我已经看到一些试图使 Rails NoSQL 友好的工作,特别是 DataMapper 2 看起来非常有趣(并且需要很长时间),但我想知道当前的 Rails 架构是否适合 DDD 项目(反活动记录)。

理想情况下,我想使用 Rails 的成熟度、社区和 Ruby。但我也看到许多成熟的项目在采用新的编程风格时遇到了问题,而这些新风格从一开始就没有被考虑过。

此外,我正在考虑使用像 Sinatra 这样的微框架,它应该让我能够灵活地使用自己的架构风格。唯一的缺点是我更喜欢一个框架来处理尽可能多的事情(没有长期的 Web 开发经验)。

0 投票
1 回答
74 浏览

xna - 持久化游戏 Actor 对象

这个问题与我一直在开发的一款游戏有关,但我相信这是一个非常笼统的概念,我还没有找到明确的答案。

我一直在试图弄清楚如何在任意时间动态地将演员(游戏世界中的对象)序列化到文件中。

语境

要理解我的问题,您需要了解世界一般是如何构造的。游戏是一个基于单元的世界,具有 3 个维度,分为更小、更易于管理的部分,我将其称为块。地形信息都是固定的已知长度,我可以很好地序列化这些信息,只要需要将该块加载到内存中(比如玩家靠近它),只需使用适当的偏移量向世界文件写入/读取。在我必须处理演员并将它们写入单个文件之前,这一切都很好。

问题

我知道 ISerializable 是一个非常有用的资源,用于实际从参与者那里获取数据,但我遇到的问题是将其动态提交到磁盘。我的意思是从包含所有演员的大文件的中间插入/删除演员。如果我可以序列化整个游戏状态和演员树会容易得多,但我需要能够一次在世界的一小部分上做到这一点。有些部分没有演员,有些会有很多(最多几百个)。当玩家在世界各地移动时,这些部分会被加载和保存。此外,演员的数量和他们的数据大小会随着游戏的进行而变化,所以我不能像处理地形一样处理它。我需要一种快速提交演员的方法,我以后可以在其中快速找到它,并且不会浪费大量文件空间。可能有用的一件事是,一个块中的所有参与者都被一次序列化/反序列化,而不是单独的。

注意:这些世界可以变得非常大(16k x 16k x 6),因此很容易拥有数百万演员。

问题

数据库真的是最好的方法吗?我不反对实施一个,但这是一个涉及的过程,我想确保在我继续之前这是一个推荐的行动方案。似乎可能会对性能产生严重影响。

0 投票
0 回答
274 浏览

postgresql - 使用多个数据存储时如何进行一致的备份?(Neo4j, Postgresql)

我使用 postgresql 和 neo4j 作为我的应用程序的后端数据存储(更多关于 Polyglot Persistence 在http://martinfowler.com/bliki/PolyglotPersistence.html)。Neo4j 和 Postgresql 都支持备份机制。

Neo4j(在线备份):http ://docs.neo4j.org/chunked/stable/operations-backup.html

Postgres(时间点恢复(PITR)备份):http ://www.postgresql.org/docs/9.1/static/continuous-archiving.html

这里的问题是如何对这两个存储进行备份,以便在恢复时即使以丢失一些数据为代价也能恢复一致的状态。欢迎任何想法/建议。

0 投票
1 回答
177 浏览

rest - Neo4j 通过 REST API 提交回调?

我遇到了https://github.com/neo4j/neo4j/blob/master/community/kernel/src/main/java/org/neo4j/graphdb/event/TransactionData.java,它允许捕获在交易过程。

我的应用程序使用两个数据存储,postgresql 和 Neo4j。为了在崩溃/失败时恢复到一致状态,我希望维护来自此事件的数据,这可能有助于协调数据库之间的数据。

但是,我们使用的是 neo4j 服务器 REST api,并且此事件可用于在嵌入式模式下使用 neo4j。是否有可能在其余批次提交中获得类似于“created_nodes”和“created_relationships”的响应?

0 投票
1 回答
2077 浏览

java - 使用 Hibernate ORM 和 OGM 组合 SQL 和 NOSQL 数据库

我有一个使用 SQL Server 的应用程序。我想使用一个 NOSQL 存储,我决定它是图形,因为我的数据是高度连接的。Neo4j 是一种选择。

我希望能够在不触及应用层的情况下切换数据库,例如,只修改一些 xml 配置文件。我看过一些网上公开的例子,我发现 ORM 和 OGM 配置应用程序的方式不同,每个配置文件都有自己的名称,更重要的是有自己的结构。查看每个代码的代码发现它们在初始化会话的方式上也有所不同,这对我的想法来说听起来并不好。

我的问题是:“在不触及现有应用程序代码的情况下,在两个数据库之间切换是否有可能或可行——无需大量开销?我可以添加东西但不触及已经存在的东西”。在 SQL 和 NOSQL 数据库之间建立纯粹的多语言持久性是一个好主意,例如,使用 Hibernate。

在深入挖掘之前,我想听听你们的意见。我们这里有一个 Hibernate 人吗?

0 投票
3 回答
176 浏览

scala - 启动应用程序的多语言持久性

我正在开发我的下一个应用程序,我对使用多语言持久性非常感兴趣。我喜欢能够为不同的服务查询不同的数据结构的想法。我本质上是想同步 MongoDB、Neo4j/Titan、SQL,也许还有 Cassandra/Hbase。

目前,我将所有内容包装在一个 try/catch 块中,如果其中一个失败,则将它们全部回滚。但是,这会占用我的写作时间。我还研究了 Kafka 或 ZeroMQ 等 AMQP 系统,但这些系统似乎更以大数据为中心,而我的应用程序仍然很小,我希望保持高效。

有没有人有这方面的经验?对于小型应用程序来说,MQ 是一个好主意还是我过早地优化了?

谢谢

0 投票
1 回答
437 浏览

amazon-redshift - 我是否应该将小数据集存储在 Redshift 中?

我正在使用 AWS Redshift 解决大数据问题。这个应用程序现在需要个性化,这需要将用户偏好存储在数据存储中。系统中的用户少于 100,因此不需要大数据存储。

我该如何解决这个问题,使用多语言商店可能是 RDS Postgres 来存储用户偏好,或者我应该只使用 Redshift 来模拟用户偏好。

0 投票
2 回答
1035 浏览

graph - 边缘集合与图

我在 ArangoDB 中没有得到一件事:

边缘集合和图有什么区别?在哪些情况下我应该选择哪个?

0 投票
1 回答
94 浏览

mysql - 在 Google Cloud Platform 上设计 PolyGlot 数据库

我正在设计一个必须托管在 Google Cloud SQL 和 Google Datastore 上的全球 ERP/调度系统。

在大多数情况下,数据是强相关的,并且数量不大或不稳定,因此非常适合关系数据库。

当前的设计将地址本地存储在 customer、contract、employee、site、workorder、contractedSites 表中......总共大约 12 个不同的地方。我要求 DEV 团队修改设计以创建一个可以被所有其他实体引用的 ADDRESS 表(如果需要,可以使用链接表为地址历史、多个地址等提供灵活性)。

问题 - 由于所有这些场景、不同国家和多个电话号码等的地址/联系方式格式差异很大,我认为应该将 ADDRESS 和 CONTACTDETAILS 移动到 DataStore 并通过来自 Cloud SQL 平台的 id 引用它们。因此,该结构完全灵活,可以适应世界各地的地址格式。

这听起来是明智的还是它过度设计了解决方案并且应该只使用 CLoud SQL 中的通用地址表?

我担心 Google 平台中的瓶颈似乎是单个 MySQL 主服务器。这是一项仅限于 16 个 vCPU 的托管服务,因此我正试图将更多功能区域移动到数据存储区中。

希望这是有道理的!