我正在建立一个论坛,并研究使用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中建模的内容:
使用第三个属性定义关系的类型:
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)
这种方法的缺点是查询结果中存在多余的信息,因为它们会返回您可能不在乎的多余项目。例如,如果您要查询 …
我遇到了以下情况:
class Foo {
static {
// setup for logging and configuration
}
public static void setup() {
// do nothing
}
}
Run Code Online (Sandbox Code Playgroud)
这是惯用的Java代码吗?是否应该避免这种具体原因?
这是在测试套件中找到的.
我最初担心的是理论上可以在不调用#setup()的情况下进行初始化.
我有以下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.
这是代码:
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
。为什么?
这是一个奇怪的错误。