我有一个问题,我知道,已被广泛讨论过,但在我看来,还有一个方面需要澄清.
我正在创建一个带有多语言数据库的Web应用程序,我已经找到了一些好的练习文章(例如 这个),这里的答案就像这样堆栈溢出.
所以我决定使用一个带有我的项目ID的主表和另一个带有每个项目翻译的表格,比方说,例如
Content
ContentTranslation
Run Code Online (Sandbox Code Playgroud)
要么
Category
CategoryTranslation
Run Code Online (Sandbox Code Playgroud)
等等.
现在我在做什么?我只是从数据库中获取所有翻译的项目,然后我迭代每一个,以根据当前用户的本地查找正确的翻译,如果我找到正确的本地我设置到主要对象,该页面的翻译渲染,否则我只是得到标记为"默认"的翻译.
但是,对于大量对象和翻译,服务器响应时间可能会增长,即使用户可能没有注意到,我也不希望这样.
那么,这个用例有没有好的做法呢?例如,一些特定的查询说"选择带语言环境的翻译",但是如果你没有找到它只是设置了一个"默认"标志?
现在,我正在使用Spring MVC和Hibernate以及JPA(通过JPARepository).
我的对象都扩展了我用这种方式创建的基本可翻译类
@MappedSuperclass
public abstract class Translatable<T extends Translation> extends BaseDTO {
private static final long serialVersionUID = 562001309781752460L;
private String title;
@OneToMany(fetch=FetchType.EAGER, orphanRemoval=true, cascade=CascadeType.ALL)
private Set<T> translations = new HashSet<T>();
@Transient private T currentLocale;
public void addLocale(T translation, boolean edit) {
if (!edit)
getTranslations().add(translation);
}
public void remLocale(String locale) {
T tr = null;
for (T candidate: getTranslations()) {
if (candidate.getLocale().equals(locale))
tr …Run Code Online (Sandbox Code Playgroud) 我有一个python脚本,它每天收集数据并将其插入MongoDB集合(约1000万个文档)。有时,工作失败了,剩下的部分数据对我没有用。我想先将数据插入到暂存集合中,然后仅在作业完成且数据完成后才将所有文档从暂存集合中复制或移动到最终集合中。我似乎找不到作为“批量”类型操作执行此操作的直接解决方案,但似乎应该有一个解决方案。
在SQL中将是这样的:
INSERT INTO final_table
SELECT *
FROM staging_table
Run Code Online (Sandbox Code Playgroud)
我以为db.collection.copyTo()可以解决此问题,但似乎使目标集合成为源集合的克隆。
此外,我从中知道:mongodb将文档从一个集合移到另一个集合,我可以执行以下操作:
var documentsToMove = db.collectionA.find({});
documentsToMove.forEach(function(doc) {
db.collectionB.insert(doc);
}
Run Code Online (Sandbox Code Playgroud)
但是似乎应该有一个更有效的方法。
那么,如何才能从一个集合中获取所有文档,并以最有效的方式将它们插入到另一个集合中?
注意:最终集合中已经有数据。我要移动的新文档将添加到此数据中,例如,如果我的暂存集合有2个文档,而我的最终集合有10个文档,那么在转移暂存数据后,我的最终集合中将有12个文档。