背景
我正在从我们的RDBMS数据库到MongoDB的转换原型.在非规范化的过程中,似乎我有两个选择,一个导致许多(数百万)较小的文档,或者一个导致较少(数十万)大文档.
如果我可以将它提炼成一个简单的模拟,那么具有较少客户文档的集合(如Java)之间的区别是:
class Customer {
private String name;
private Address address;
// each CreditCard has hundreds of Payment instances
private Set<CreditCard> creditCards;
}
或者包含许多许多付款文件的集合,如下所示:
class Payment {
private Customer customer;
private CreditCard creditCard;
private Date payDate;
private float payAmount;
}
问题
MongoDB是否设计为偏好许多很小的文档或更少的大文档?答案主要取决于我计划运行的查询吗?(即客户X有多少张信用卡?vs上个月所有客户支付的平均金额是多少?)
我已经环顾了很多,但我没有偶然发现任何可以帮助我回答我的问题的MongoDB架构最佳实践.
我注册了一个Spring ApplicationListener bean来监听ContextRefreshed事件.但是出于一些奇怪的原因,我在完成上下文初始化时得到了对该方法的两次调用onApplicationEvent(ContextRefreshedEvent).这是正常行为还是表示我的配置有问题?我正在使用Jetty 8作为我的Servlet容器.
我的相关web.xml配置如下
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/spring/spring-config.xml</param-value>
</context-param>
<servlet>
<servlet-name>Spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>Spring</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
谢谢!
如果我正确理解Hadoop生态系统,我可以运行我的MapReduce作业从HDFS或HBase获取数据.假设先前的假设是正确的,为什么我会选择一个而不是另一个?使用HBase作为MR源,是否具有性能,可靠性,成本或易用性的优势?
我能找到的最好的是这句话,"HBase是当你需要对非常大的数据集进行实时读/写随机访问时使用的Hadoop应用程序." - Tom White(2009)Hadoop:The Definitive Guide,1st Edition
我目前正在使用Spring 3.0.4,并Apache Tiles 2.2.2在我的web应用程序.我想替换JSP,Apache Velocity 1.6.3但我对如何做到这一点感到困惑.最后,我希望能够在Tiles定义中执行以下操作:
<definition name="basicLayout" template="/WEB-INF/layout/basicLayout.vm">
<put-attribute name="header" value="/WEB-INF/layout/header.vm" />
<put-attribute name="content-area" value="/WEB-INF/layout/content.vm" />
<put-attribute name="footer" value="/WEB-INF/layout/footer.vm" />
</definition>
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,我是否需要创建任何自定义视图类来支持它?我目前正在使用标准的Spring VelocityConfigurer,TilesConfigurer,VelocityView,TilesView类.
谢谢!