问题标签 [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.

0 投票
2 回答
16618 浏览

json - RESTful GET 响应是否应该返回资源的 ID?

这里的一些开发人员正在就来自RESTful API的GET 请求是否应该返回所请求资源的 ID 进行友好的(有些人会说宗教性的)讨论。让我们假设以下 GET 请求:

http://my.api.com/rest/users/23

这当前返回:

请注意,结果集中缺少“id”。

基本上有 4 个阵营在与这个问题作斗争。

CAMP #1:当调用者发出 GET 请求时,他们已经知道 ID。因此,结果集不应包含ID。如果调用者需要此数据来启用 UI 编辑,则调用者需要通过 ID 23,也许手动将成员 {"id": 23} 添加到 JSON。
Camp #1 中的人们还争辩说,结果集中存在 ID 表明该值可以修改,当然不能。

CAMP #2:如果没有 ID,JSON 结果集就不能原生地用于 UI 表单中的编辑/更新操作。相反,AJAX 回调机制需要负责传递 ID 字段并将这些字段手动添加到结果集中。这似乎很笨拙且容易出错。UI 人员正在争论结果集“感觉”就像它缺少应该存在的数据,即 ID。

CAMP #3:这些人关心的是一致性。如果我们曾经有一个 API 返回的用户对象集合,这些对象必须包含 ID。因此,为了保持一致性,GET 的单例版本也应该包含 ID。

CAMP #4:这些人建议用户的 GET 请求可以返回包含 ID 的 HyperMedia 或 SelfLinks 形式的元数据。

这不是一个深奥的“谁是对的?” 论据,要么。我们采用的方法将决定我们 API 的形状,并影响几个开发人员在新几周内的工作量。

0 投票
1 回答
227 浏览

memcached - solution to synch back cache value to database?

below is the scenario: here is a access statistic system, just like Blogger's overviewstats function. Statistic data is stored persistent in database(like MySQL), while using a key-value cache(now is memcache) to cache the access counts, each access only update the value in cache.

Now the question is how to synch back the latest count value to database? A normal solution is to write back after some interval, but memcache will discard items when there is no enough spaces, some updates may lost. so I think a better solution is if memcache can send a message(like JMS) when discarding an item, and then i can synch that item to database. It seems that memcache does not provide this function, is there any other key-value cache can do this? Or is there any better solutions?

0 投票
4 回答
4187 浏览

mysql - MySQL:如何锁定表并启动事务?

TL;DR - MySQL 不允许您同时锁定表和使用事务。有没有办法解决?

我有一个 MySQL 表,用于缓存来自(慢)外部系统的一些数据。该数据用于显示网页(用 PHP 编写)。每隔一段时间,当缓存的数据被认为太旧时,其中一个 Web 连接应该触发缓存数据的更新。

我必须处理三个问题:

  • 在我更新缓存数据时,其他客户端会尝试读取缓存数据
  • 多个客户端可能认为缓存数据太旧并尝试同时更新它
  • 执行工作的 PHP 实例随时可能意外终止,数据不应损坏

我可以通过使用事务来解决第一个和最后一个问题,因此客户端将能够读取旧数据,直到事务提交,他们将立即看到新数据。任何问题只会导致事务回滚。

我可以通过锁定表来解决第二个问题,这样只有一个进程有机会执行更新。当任何其他进程获得锁定时,他们会意识到他们已经被打败了,不需要更新任何东西。

这意味着我需要锁定表启动事务。根据 MySQL 手册,这是不可能的。启动事务会释放锁,锁定表会提交任何活动事务。

有没有办法解决这个问题,还是有另一种方法可以完全实现我的目标?

0 投票
1 回答
320 浏览

git - Git 和 Dropbox - 本地仓库

我已经阅读了许多主题并观看了许多关于结合 Dropbox 和 Git 功能的视频。一个这样的主题是:有效地同时使用 Git 和 Dropbox?

这是我想做的:

  • 我目前正在做一个大型的个人项目(只有我,不需要加密)。
  • 工作在两台台式计算机(Win 7、Ubuntu)和一台笔记本电脑(OSx)上完成。
  • 我希望我的文件可以从任何地方访问并在版本控制(git)下
  • 对所有文件(通过 Dropbox.com)进行网络访问会很棒,所以如果我要安装 Git,就不需要安装 Git。借一台电脑。

大多数指南使用 Dropbox 来存放远程仓库。这没关系,但是必须在每台计算机上安装 git 才能访问文件,这样就无法通过 web 直接访问文件。

目前我在 Dropbox 中有我的文件和本地存储库(是的,我知道大小问题),以及学校 ssh 服务器上的远程存储库。这个想法是我可以选择在任何计算机上工作(即使没有提交),并且仍然能够使用计算机 #2 或 #3 继续工作并从那里提交。整体备份在 ssh 服务器上。

对此设置的任何想法将不胜感激。如果有人有更好的主意,请告诉我:)

0 投票
1 回答
870 浏览

mysql - MySQL - sql server:一致性检查

我正在尝试检查两个数据库之间数据加载的结果。不幸的是,我只能直接访问一个数据库(MySQL),管理 MSSQL 的公司可以通过 API 向我们公开它。

我想做的是检查行集中某些列的一致性。最初,我希望能够对列运行 CRC 或哈希检查,但似乎没有兼容的方式来执行此操作。

例如,我们可以对 MySQL 中的列运行 CRC32,但在 MSSQL 上没有可靠的方法来做同样的事情。或者,在 MSSQL 上有 CHECKSUM_AGG,但在 MySQL 上没有其他选择。

最终结果是,如果校验和不同以识别需要更改的行,我想进行二进制搜索。

目前没有批量加载接口,SSIS 不可用(MSSQL 服务器不属于我的公司)。

0 投票
1 回答
750 浏览

android - 应用对象的序列化

起初我有很强的 Java 知识,但刚开始接触 Android。

我的 Android 应用程序正在下载一些相当复杂的数据(文本、日期、图像),我将这些数据保存在自定义对象中。数据需要不时刷新。但是通常下载的数据不会改变。

为了将数据保存在内存中,我使用了应用程序对象。不幸的是,当应用程序被杀死时,应用程序对象实例似乎被破坏了。

因此,我想知道在 onPause() 期间将我的自定义对象(包含在应用程序对象中)序列化并保存在内部存储中是否是一种好习惯。显然,我会先从 onResume() 中的文件读取,然后再从 Internet 重新加载。这个想法也是为了启用离线查看。

从长远来看,计划是在后台服务中移动下载日期的代码。由于在 Android 中保持应用程序状态似乎有很多不同的方法,我想确定这是正确的方法。

0 投票
1 回答
574 浏览

repository-pattern - 存储库模式和数据一致性

在我的项目中,我将存储库模式用于业务层。阅读了很多关于存储库模式的信息我还没有找到任何关于如何保持业务对象与数据同步的信息。

假设我已经加载了一些数据,通过映射创建了我的业务对象并将它们保存到存储库。我的存储库实现维护更改跟踪,因此我可以轻松更新底层数据层。

该应用程序是具有多个客户端的 n 层应用程序,并且(可能)在不同的独立服务器上具有多个业务层实例。

问题:
如何保持存储库中业务对象与数据库中相应数据之间的数据一致性?

关于何时以及如何更新在存储库中缓存数据在数据库中更改的业务对象是否有任何模式或最佳实践?

0 投票
1 回答
29 浏览

sql - 在表行之间实现数据数学一致性

我有 3 张桌子:Persons, Variables, Person_Data.

Person_Data表中包含不同人的各种变量的数值数据。列是:variable_valueperson_id(到 的外键Persons)和variable_id(到 的外键Variables)。

一些变量相互关联(例如:收入、家庭规模和人均收入)。我想创建一个Variable_Relationship表来存储此类信息并执行数据完整性检查。表中的一列将是Dependant_Variable_Id(关系的 LHS)。

  1. 问题是 RHS 变量的数量不是固定的,数学表达式也不是固定的。
  2. 有没有办法很好地实现这一点?

现在我正在考虑一个relationship_definition文本列以及另一个具有列Relationship_IdRHS_VariableId表。

0 投票
1 回答
555 浏览

java - 如何验证 POJO 与所需属性列表中的 NOT NULLABLE 属性?

我的问题是我需要根据数据验证在我的数据库中保留两种状态“VALID”和“INVALID”,这意味着,在我的数据库中,所有属性都是 NULLABLE 但如果所有必需的值,另一个进程将放置状态“VALID”当缺少一个或多个必需值时,它们存在并且“无效”。

我正在使用关系模型(oracle 11g)和 Hibernate 3。

所以...

有人知道一个框架或机制来验证给定对象(PO​​JO)与所需对象/属性的列表(或另一个 POJO)之间的数据一致性(对象/属性不为空)?请注意,这些对象可以具有简单的属性,也可以包括其他对象或对象列表。

更重要的是,在某些情况下,验证有一个条件,例如,仅当另一个属性具有特定值时才验证(检查是否为 NULL)一个特定属性。

目前我有一种方法使用反射和一个数据库表来存储我所有需要的对象/属性的参数化,但我想知道是否存在另一种更好的方法。

提前致谢

0 投票
2 回答
497 浏览

distributed-computing - 从分布式数据库读取的一致性

我有一组数据库,分布在网络中的多个位置,例如。一个需要在该数据库中存储一些数据的客户端。

我需要确保我的数据将始终被存储。

我无法使用同步/异步复制组织副本集,因为它会使我连接到一个故障点的主服务器,因此我将数据从客户端发送到我知道的所有数据库。显然,一个数据库可能无法存储,所以我依赖于其他数据库的写入。最后,尽管这些数据集是重叠的,但我得到了存储在 DB 中的不同数据集。(例如 DB1 -> [1, 2, 3],DB2 -> [1, 3],DB3 -> [2,3,4])

从这些数据库读取时如何获得一致的数据?我应该在写入数据的客户端和读取的客户端上应用哪些技术才能成功合并数据集(获取阅读器 [1,2,3,4])?