小编use*_*232的帖子

DynamoDB邻接列表是否应该使用离散分区键来为每种类型的关系建模?

语境

我正在建立一个论坛,并研究使用DynamoDB和邻接表对数据进行建模。一些顶级实体(例如用户)可能与其他顶级实体(例如评论)具有多种类型的关系。

要求

例如,假设我们希望能够执行以下操作:

  • 用户可以评论
  • 用户可以关注评论
  • 评论可以显示喜欢它的用户
  • 评论可以显示关注它的用户
  • 用户个人资料可以显示他们喜欢的评论
  • 用户个人资料可以显示他们关注的评论

因此,本质上我们有很多(喜欢或关注)多对多(用户<=>注释)。

注意:本示例是故意删除的,实际上,将要建立更多的关系模型,因此我尝试在此处考虑可扩展的内容。

基准线

以下顶级数据可能在任何邻接列表表示中都是常见的:

First_id(Partition key)         Second_id(Sort Key)         Data
-------------                   ----------                  ------
User-Harry                      User-Harry                  User data
User-Ron                        User-Ron                    User data
User-Hermione                   User-Hermione               User data
Comment-A                       Comment-A                   Comment data
Comment-B                       Comment-B                   Comment data
Comment-C                       Comment-C                   Comment data
Run Code Online (Sandbox Code Playgroud)

此外,对于下面的每个表,将有一个等效的全局二级索引,其中交换了分区键和排序键。

示例数据

这是我想在DynamoDB中建模的内容:

  1. 哈里喜欢评论A
  2. 哈里喜欢评论B
  3. 哈里遵循评论A
  4. 罗恩(Ron)喜欢评论B
  5. 赫敏喜欢评论C

选项1

使用第三个属性定义关系的类型:

First_id(Partition key)         Second_id(Sort Key)         Data
-------------                   ----------                  ------
Comment-A                       User-Harry                  "LIKES"
Comment-B                       User-Harry                  "LIKES"
Comment-A                       User-Harry                  "FOLLOWS"
Comment-B                       User-Ron                    "LIKES"
Comment-C                       User-Hermione               "FOLLOWS"
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是查询结果中存在多余的信息,因为它们会返回您可能不在乎的多余项目。例如,如果您要查询 …

forum adjacency-list amazon-dynamodb

6
推荐指数
1
解决办法
188
查看次数

在具有静态初始化程序可接受/惯用的类中使用空静态方法?

我遇到了以下情况:

class Foo {

  static {
    // setup for logging and configuration
  }

  public static void setup() {
    // do nothing
  }

}
Run Code Online (Sandbox Code Playgroud)

这是惯用的Java代码吗?是否应该避免这种具体原因?

这是在测试套件中找到的.

我最初担心的是理论上可以在不调用#setup()的情况下进行初始化.

java static idioms initialization

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

使用冲突的元素名称解压缩Go中的XML

我有以下XML,外部定义并且在我的组织的控制之外:

<foo>
  <bar>
    <zip>zip</zip>
  </bar>
  <bar>
    <zap>zap</zap>
  </bar>
</foo>
Run Code Online (Sandbox Code Playgroud)

我正在使用这些结构:

type Foo struct {
    XMLName xml.Name `xml:"foo"`
    Bar1    Bar1
    Bar2    Bar2
}

type Bar1 struct {
    XMLName xml.Name `xml:"bar"`
    Zip     string   `xml:"zip"`
}

type Bar2 struct {
    XMLName xml.Name `xml:"bar"`
    Zap     string   `xml:"zap"`
}
Run Code Online (Sandbox Code Playgroud)

由于"bar"名称存在冲突,因此没有任何内容可以解组.如何填充Bar1和Bar2结构?

这就是我所拥有的:https://play.golang.org/p/D2IRLojcTB

这是我想要的结果:https://play.golang.org/p/Ytrbzzy9Ok

在第二个,我已经将第二个'bar'更新为'bar1',这一切都有效.我宁愿想出一个更清晰的解决方案来修改传入的XML.

xml encoding marshalling go unmarshalling

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

为什么Java的java.time.format.DateTimeFormatter#format(LocalDateTime)增加一年?

这是代码:

LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(1451438792953L), ZoneId.of("UTC"));
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
String output = dateTimeFormatter.format(localDateTime);
Run Code Online (Sandbox Code Playgroud)

这是值localDateTime

2015-12-30T01:26:32.953
Run Code Online (Sandbox Code Playgroud)

这是值output

2016-12-30T01:26:32.953Z
Run Code Online (Sandbox Code Playgroud)

为什么要增加一年?

其中java.time.temporal.WeekFields有几种方法,有时会newYearWeek增加年数1。为什么?

这是一个奇怪的错误。

java time localization utc

0
推荐指数
1
解决办法
167
查看次数