问题标签 [data-consistency]
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.
concurrency - 随着微服务的扩展管理数据存储并发性
我仍在努力寻找解决微服务的方法。我有一个基本问题。
在企业场景中,微服务可能必须写入持久数据存储——无论是 RDBMS 还是某种 NoSQL。在大多数情况下,持久数据存储是企业级的,但是是单个实体(当然是复制和备份的)。
现在,让我们考虑部署到私有/公共云环境的单个微服务的情况,该环境拥有自己的持久数据存储(比如企业级 RDBMS)。当我扩展我的微服务时,会有多个微服务实例尝试从同一个数据存储中读取/写入。传统的数据存储可能可以调整为处理约 50-200 个并发连接。当我的微服务必须扩展得远远超出这个范围时,我该如何处理?
在这种情况下,最佳实践是什么?有什么可以使用的模式吗?
sql-server - 在 C# 中的 SQL Server 中处理多用户环境中的数据库快照
我用 C# 编写了一些测试,这些测试利用了数据库、更新和修改其中的值。为了确保数据库在每次测试后恢复到之前的状态,我执行以下操作:
我对测试套件开始时使用的所有数据库进行了快照。每次测试后,我将数据库恢复为其快照,以确保不会对即将运行的新测试用例的数据库进行任何更改。在测试套件结束时,我删除了创建的快照。
下面是测试类的初始化和清理方法
这是在测试套件中的每个测试之后执行的方法。
我的问题:在多用户环境中,我应该如何处理创建数据库快照的任务?当我的测试套件仍在运行时,一个人可能会创建不正确的快照,并且他/她的测试可能会失败,甚至数据库可能会在测试套件结束时恢复到不正确的状态。CreateDatabaseSnapshots();
在调用and之前必须进行哪些必要的检查DeleteDatabaseSnapshots();
?
我只想确保数据库在测试过程中不受影响。我也尝试过使用备用数据库、事务范围和其他替代方案,但它们不能在我的场景中使用,因此使用快照是唯一可行的选择。
java - JTable 中的数组数据
以下代码用于设置 JTable 的行和列:
} 其中 null 表示一个空格。计算器是-惊喜,惊喜-我的计算器类,它执行所有数学函数。它适用于之前通过 GUI 传入的数字。
该表是输出对话框的一部分。现在我遇到的问题是,在同一会话期间第二次打开对话框后,使用来自第一个屏幕的不同输入,数据没有刷新。它仍然显示使用旧输入完成的计算。
传递对象不会是问题,calculator
因为依赖于该对象的其他组件(Plotter
实例)总是由
问题出在哪里?
还有另一种更好的方式将数据放入表中吗?
编辑
我正在使用 IntelliJ 的 GUI Builder,它使用 XML 文件来标记 componentbeans 的状态。因此,一些组件(见上文)是手动创建的,而其他组件是我们给定的 XML 文件。
amazon-web-services - AWS S3 保存和加载项目需要多长时间?
S3 FAQ 提到“所有区域中的 Amazon S3 存储桶为新对象的 PUTS 提供写后读一致性,并为覆盖 PUTS 和 DELETES 提供最终一致性。” 但是,我不知道获得最终一致性需要多长时间。我试图搜索这个,但在 S3 文档中找不到答案。
情况:
我们的网站由 7 个步骤组成。当用户在每个步骤中单击保存时,我们希望将一个 json 文档(包含所有 7 个步骤的信息)保存到 Amazon S3。目前我们计划:
- 创建一个 S3 存储桶来存储所有 json 文档。
- 当用户保存第 1 步时,我们在 S3 中创建一个新项目。
- 当用户保存第 2-7 步时,我们会覆盖现有项目。
- 用户保存一个步骤并刷新页面后,他应该可以看到他刚刚保存的信息。即我们要确保我们总是在写后读。
完整的 json 文档(全部 7 个步骤完成)大约 20 KB。用户单击保存按钮后,我们可以将页面冻结一段时间,并且在保存完成之前他们无法进行其他更改。
问题:
- AWS S3 保存和加载项目需要多长时间?(我们可以在将文档保存到 S3 时冻结我们的网站)
- 是否有根据项目大小计算保存/加载时间的功能?
- 如果我选择另一个 S3 区域,保存/加载时间会有所不同吗?如果是的话,哪个是西雅图最好的地区?
c++ - 快速的二进制数据库替代方案
我想实现一个只需要处理二进制数据的快速数据库替代方案。要指定,我想要一些接近数据库的东西,即使在执行期间强制终止(任务管理器)的情况下也能安全存储,同时也可以直接从 C++ 中的内存访问。就像镜像到硬盘的结构向量一样。它应该能够每秒处理数十万次读取访问和至少 1000 次写入访问。在强制终止的情况下,最多可以丢失最后一个命令。它不需要支持多线程,并且数据库文件只能由程序的单个实例访问。只需要在 Windows 上运行。这些是我到目前为止想到的解决方案:
SQL 数据库
- 优点
- 易于实现,因为有很多库可用
- 缺点
- 服务器在不同的进程上,因此进程间通信可能很慢
- 解析 SQL 查询的必要性
- 专为多线程环境而构建,因此有很多不必要的同步
- 行不能使用指针直接访问,但每次更改至少需要复制两次
- UPDATE 查询的不必要延迟,因为需要搜索整个表并检查 WHERE 案例
- 这些只是我脑海中的一些,可能还有更多
- 优点
内存映射文件
- 优点
- 直接内存映射,因此可以直接访问指针
- 与数据库相比非常快
- 缺点
- 强制终止可能会导致整个页面不被写入
- 很多代码(我实际上并不介意)
- 无法强制同步
- 增加文件大小可能需要很多时间
- 优点
- C++ 向量*
- 优点
- 可以直接指针访问,但是需要手动通知更改
- 与数据库相比非常快
- 完全的编程自由
- 缺点
- 由于对 WriteFile 的多次调用,可能很慢
- 很多代码(我实际上并不介意)
- 优点
- 每隔几秒完成一次写入的 C++ 向量
- 优点
- 可以直接指针访问
- 与数据库相比非常快
- 完全的编程自由
- 缺点
- 大量未更改的数据被重写到文件,或者大量 RAM 浪费在防止不必要的写入上
- 在复制过程中浪费大量 RAM 写入期间无法访问
- 可能会丢失几秒钟的数据
- 多线程,因此需要同步
- 优点
*基本上,仅公开向量的每行读/写功能的包装类 OR 允许直接写入内存,但依赖于调用者通知更改,所有读取都从内存中的副本完成,所有写入都完成基于每个命令在内存和文件本身中的副本
此外,是否可以在不刷新的情况下写入文件的不同部分,然后一次刷新所有更改,以保证即使在写入期间强制终止文件也将被完全写入或根本不写入?我能想到的只是以下工作流程:
启动时复制目标文件,然后为每组数据:将所有更改写入副本 -> 通过将原始文件替换为副本来刷新
但是,我觉得这对大文件的硬盘空间来说是一种可怕的浪费。
提前感谢您的任何意见!
amazon-web-services - 如何保持数据一致?(Amazon S3 和 ElasticSearch)
想象一下,将文件上传到 Amazon S3,成功后文件(和元数据)的位置存储在 ElasticSearch 的记录中。好没问题。
但是,如果其中一个请求失败,您如何确保数据一致性(ACID?)......例如,如果 ElasticSearch 服务不可用
- 必须删除 S3 上的文件
- 但是如果 S3 上的删除失败怎么办
这将导致不一致的状态。
所以问题是如何让这些实例保持同步?
想法是:
- 如果状态不一致并且用户请求 ElasticSearch 记录但没有找到任何内容,则删除 S3 中的记录。(嗯)
- 批处理作业以搜索数据库中的不一致并删除它们。
- 在数据库中的事务中运行两个请求,如果一个失败 -> 回滚并稍后重试(队列,作业 = Overkill?)
php - 如何保证与数据库和文件系统协作的数据一致性?
如何在文件系统中存储二进制数据及其在数据库中的引用时使数据保持一致?
是否有任何数据库设计技术/模式或任何 PHP 库来帮助我通过用于数据存储的数据库和文件系统协作架构为数据带来一致性?
我的意思是数据库必须知道文件系统中数据的任何更改,那么如何在没有数据库意识的情况下拒绝更改?
注意:我在 Apache2 中使用 PHP 和 MySQL
c++ - 在进行多线程处理时保存数据
有一个下载器应用程序,它在多个线程中对下载项目执行不同类型的处理。一些线程分析输入数据,一些执行下载、提取、保存状态等。因此,每种类型的线程都对某些数据成员进行操作,其中一些线程可能同时运行。下载项可以这样描述:
我想知道如何一致地保存这些数据。例如,状态和已处理文件的数量可能已经保存,我们将保存文件列表。同时其他一些线程可能会改变文件的状态,从而改变处理文件的数量或下载的状态,使保存的数据不一致。
想到的第一个想法是为所有数据成员添加一个互斥锁,并在每次访问它们时锁定它。但这可能是低效的,因为大多数时间线程访问不同的数据成员并且在几分钟内只进行一次保存。
在我看来这样的任务在多线程编程中相当普遍,所以我希望有经验的人能提出更好的方法。
java - 确保内存数据结构的一致性
我想知道在日常示例中确保数据一致性的最佳方法是什么(可能我正在寻找一种模式),其中服务通过调用网关上的某些方法来检索数据(网关可能是数据库的边界,一个网络调用甚至内存中的数据结构)。
这是我在 Java 中描述的案例的示例:
假设 DataSourceGateway 可能不是提供事务的数据库,而是内存中的数据结构,并且 DataSourceGateway 和 Service 是 Singletons。
明显的一致性问题是另一个服务在调用myServiceMethod()
已完成doThings1()
并即将执行时修改 DataSourceGateway 中的数据doThings2()
。
这个例子被简化了,但考虑到在 dataSourceGateway 上调用不同的方法但也调用具有某些依赖关系的对象(例如 getCount 和 getAll 应该是一致的)的情况。我将其称为日常问题的原因是因为我看到相同DataSourceGateway
的 s(或 DAO)被注入到多个地方,并且通常开发人员希望调用是一致的。
确保这两个电话的计数相同的最佳方法是什么?
cassandra - 如何在cassandra中保持跨多个表的数据一致性?
我无法弄清楚如何跨多个表维护属性更新以确保数据一致性。
例如,假设我在演员和粉丝之间有多对多的关系。一个粉丝可以支持很多演员,一个演员有很多粉丝。我制作了几张表来支持我的查询
假设我是粉丝,并且在我的设置页面上,我想将我的值更改fan_attr_1
为不同的值。
在fans
桌子上我可以很好地更新我的属性,因为应用程序知道我的 fan_id 并且可以键入它。
但是,如果不先查询与风扇相关的 actor_ids,我就无法更改我fan_attr_1
的设置。fans_by_actor
fans
每当您要更新或的任何属性时,都会出现此问题actors
。
我尝试在网上寻找遇到类似问题的人,但我找不到他们。例如,在 Datastax 的数据建模课程中,他们使用具有多对多关系的演员和视频的示例,其中他们有表格actors_by_video
和videos_by_actor
. 与我咨询过的其他在线资源一样,该课程讨论了查询后的建模表,但没有深入研究如何维护数据完整性。在actors_by_video
表格中,如果我想改变一个演员的属性会发生什么?不必遍历每一行actors_by_video
来查找包含参与者的分区并更新属性吗?这听起来非常低效。另一种选择是事先查找视频 ID,但我在其他地方读到,在写入之前读取是 Cassandra 中的反模式。
从数据建模的角度或从 CQL 的角度来看,解决这个问题的最佳方法是什么?
编辑: - 固定句子存根 - 添加上下文和先前的研究