小编use*_*640的帖子

使用SQLite和Azure SQL数据库作为中央存储的在线/离线多客户端移动应用程序的最佳主键策略是什么?

在给定以下内容的情况下,哪种主键策略最适合用于关系数据库模型?

  • 成千上万的用户
  • 每个用户多个客户端(手机,平板电脑,桌面)
  • 每桌数百万行(不断增长)

Azure SQL将成为将通过Web API公开的中央数据存储.客户端将包括一个Web应用程序和许多本机应用程序,包括iOS,Android,Mac,Windows 8等.Web应用程序将需要"始终开启"连接,并且不会有本地数据存储,而是将检索和更新通过api - 通过RESTful API思考CRUD.

所有其他客户端(手机,平板电脑,桌面)都将拥有本地数据库(SQLite).首次使用此类客户端时,用户必须进行身份验证和同步.经过身份验证和同步后,这些客户端可以在脱机模式下运行(在本地SQLite数据库中创建,删除和更新记录).这些更改最终将与Azure后端同步.

数据库的分布式特性给我们留下了一个主要的关键问题以及提出这个问题的原因.

以下是我们迄今为止所考虑的内容:

GUID

每个客户端都创建自己的密钥.在同步时,重复密钥的可能性非常小,但我们需要通过将功能写入每个客户端以使用新密钥更新所有关系来解释它.GUID很大,当考虑每个表的多个外键时,存储可能会成为一个问题.可能最大的问题是GUID的随机性,这意味着由于碎片,它们不能(或不应该)用作聚簇索引.这意味着我们需要为每个表创建一个聚簇索引(可能是任意的).

身分

每个客户端都创建自己的主键.在同步时,这些密钥将替换为服务器生成的密钥.这增加了同步过程的额外复杂性,并迫使每个客户端"修复"其密钥,包括相关表上的所有外键.

综合

在首次同步时为每个客户端分配一个客户端ID.此客户端ID与本地自动递增ID一起用作每个表的复合主键.此复合键将是唯一的,因此同步时不应存在冲突,但它确实意味着大多数表将需要复合主键.性能和查询复杂性是这里的关注点.

HiLo(合并复合材料)

与复合方法一样,每个客户端在第一次同步时都会被分配一个客户端ID(int32)客户端ID与唯一的本地ID(int32)合并为一个列,以创建应用程序范围的唯一ID(int64).这应该导致同步期间没有冲突.虽然这些密钥与GUID的顺序更多,因为每个客户端生成的ID是顺序的,但是会有数千个独特的客户端ID,因此我们是否仍然存在聚集索引碎片的风险?

我们忽略了什么吗?还有其他值得研究的方法吗?讨论每种方法的优缺点将非常有帮助.

sqlite android database-design azure ios

13
推荐指数
1
解决办法
2546
查看次数

使用React钩子和备忘录时,如何防止子组件重新渲染?

我刚刚开始使用React钩子进行实验,我想知道如何在父组件重新渲染时阻止子组件重新渲染。我正在寻找类似于在中返回false的内容componentDidUpdate。我的问题似乎源于我在子组件中调用以更改父组件状态的单击处理程序。由于该函数是在父级组件中创建的,因此会在每个父级渲染上创建新函数,从而触发子级组件中的属性更改,然后导致子级重新渲染(我认为)。这是一些示例代码来帮助说明这种情况。

function Parent() {
    const [item, setItem] = useState({ name: "item", value: 0 });

    const handleChangeItem = () => {
        const newValue = item.value + 1;
        setItem({ ...item, value: newValue });
    };

    return <Child item={item} changeItem={handleChangeItem} />;
}

const Child = React.memo(function Child({ item, changeItem }) {
    function handleClick(){
        changeItem();
    }
    return (
        <div>
            Name: {item.name} Value: {item.value}
            <button onClick={handleClick}>change state in parent</button>
        </div>
    );
});
Run Code Online (Sandbox Code Playgroud)

如何防止子组件在每次父组件渲染时都渲染?应该handleChangeItem在父级中住其他地方,以便不在每个渲染器上重新创建它吗?如果是这样,它如何访问itemsetItem返回useState

我是一个非常新的反应者,刚刚开始玩钩子游戏,所以我可能缺少明显的东西。

reactjs react-hooks

12
推荐指数
2
解决办法
4001
查看次数

是否有最佳或推荐的实践来命名实体框架迁移?

使用Entity Framework代码时,首次迁移是为每次迁移选择名称的最佳做法吗?例如,每个名称可能包含版本号或对模型或两者进行的更改.

Add-Migration Added Manager.Employees
Add-Migration Add_Employee_ManagerId
Add-Migration version 2
Add-Migration v2_Add_Employee_ManagerId
Run Code Online (Sandbox Code Playgroud)

有关为具有多个开发人员和许多迁移的项目选择良好命名策略的任何提示吗?

我发现了类似的问题,但没有答案.

entity-framework naming-conventions

9
推荐指数
1
解决办法
1845
查看次数

有没有使用Angular CLI开始的任何理由?

我正在尝试决定是否应该将Angular CLI用于新项目.我这样做的主要原因是为了避免现在设置新项目的麻烦,而是专注于学习新的Angular并构建应用程序.

我来自Angular 1.x所以对我来说麻烦源于学习除了新的Angular之外的所有新工具.大多数文档都引用了systemjs,但是webpack似乎是社区移动的方向,所以我想走那条路.

我更愿意学习并使用Angular工具链(包括webpack),但我想尽可能地推迟一点.我一般不喜欢CLI这样的"黑盒子".

我想从使用CLI开始,然后在我有时间投资了解更多有关webpack等的信息时,将在某一点上脱离.我的问题是:CLI给我带来了什么限制,我可以轻松地打破在将来远离它,在使用它作为一种快速入门方式之前,我通常应该考虑什么?

angularjs angular

8
推荐指数
1
解决办法
2953
查看次数

将上下文传递给自定义钩子还是在自定义钩子内调用 useContext 更好?

我有越来越多的自定义钩子,其中许多通过useContext钩子访问相同的反应上下文。在许多组件中,需要使用多个自定义钩子。

useContext每个组件调用一次并将上下文传递到我的自定义钩子中更好还是useContext在每个自定义钩子内调用更好?可能没有正确或错误的答案,但“更好”是指有最佳实践吗?一种方法比另一种更有意义吗?

reactjs react-hooks

8
推荐指数
1
解决办法
4958
查看次数

可以在Javascript中生成加密强大的UUID吗?

今天的网络浏览器(Chrome,IE,Safari和Firefox)的状态是什么,以及它们创建加密强大的UUID的能力?在研究这个问题时,我一直无法找到任何确定的东西.我在stackoverflow和其他地方遇到过有关Math.random问题的信息,但我想知道所有这些的当前状态是什么.

UPDATE

正如icktoofay所指出的,crypto.getRandomValues是这样做的方法.不幸的是,浏览器的支持是有限的.有没有一种行之有效的解决方法?是否有任何javascript库可以解决这个问题?

javascript uuid guid google-chrome

5
推荐指数
1
解决办法
759
查看次数

如何区分 Visual Studio Code 的实例?

当我打开多个 VS Code 实例时,我想快速确定我正在使用哪个实例。我尝试更改实例的主题,但更改会影响所有实例。

我是否忽略了一个选择?有任何想法吗?

visual-studio-code

5
推荐指数
1
解决办法
1079
查看次数

Aurora PostgreSQL可以与AWS AppSync一起使用吗?

我已经看到DynamoDB作为AWS AppSync的数据源的示例,但是我想知道是否可以使用Aurora(特别是PostgreSQL)?如果是,那么基本示例的解析器将是什么样?是否有任何资源可以证明可用于Aurora PostgreSQL甚至MySQL?

amazon-aurora aws-appsync

5
推荐指数
2
解决办法
2891
查看次数

如何配置 Cosmos DB .NET 3.0 SDK 以使用驼峰式序列化?

我的 .NET POCO 在ProperCase. 我的 json 在camelCase. 如何配置 .NET SDK 的 3.0 版以在与 Cosmos DB 之间进行序列化/反序列化时进行转换?

我知道我可以将属性添加[JsonProperty(PropertyName = "myProperty")]到每个属性,但如何告诉 SDK 默认为所有属性执行此操作?

我试图避免为每个属性添加一个属性。

.net azure-cosmosdb

5
推荐指数
3
解决办法
3013
查看次数

为什么 React 组件在用观察者()包装时会渲染两次?

简单地用 包裹 React 组件observer()似乎会导致它们渲染两次。可能的原因是什么?我正在运行最新版本的 react 16.8.3、mobx 5.9.4 和 mobx-react-lite 1.2.0

例如:

import React from "react";
import { observer } from "mobx-react-lite";

const Item = observer(() => {
  return (
    <div>
      {console.log("render item")}
      Item
    </div>
  );
});

export default Item;
Run Code Online (Sandbox Code Playgroud)

这发生在相对复杂的应用程序中。我在调试另一个问题时注意到了这种行为。然后我删除了尽可能多的代码,并能够在一个非常简单的情况下重现该问题。

编辑:请参阅下面的答案。我能够通过尝试使用 codeandbox 进行 repo 来确定问题。

mobx mobx-react

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