【发布时间】:2012-09-30 16:08:00
【问题描述】:
我正在考虑解决一个编程问题,我想我需要了解很多高级编程概念。由于某些原因,我决定用 Java 编写代码——即使我并不精通它。 因此,我希望您为我提供建议、指导、资源指针、书籍、教程或任何您认为相关的通用建议。
这是我的问题的基本性质:
我需要创建一个客户端-服务器架构。服务器支持多个并发客户端。客户端向其发送简单指令(可能是服务器公开某种 API/在特定端口上运行监听器),服务器执行指令并将结果发送回客户端。
服务器的主要工作是根据给它的指令进行大量的数据处理。它从后端数据库/文件系统获取数据。数据量可以轻松飙升至 ~ 200GB - 700GB。数据通常会流式传输到它,但在处理过程中可能需要在内存缓存中保存大量数据(如果 RAM 不够,则将其分页到磁盘)。计算在本质上通常是数值密集型(比如说对矩阵求逆)
服务器应该能够做多线程(我不知道这个术语在Java中是什么意思,我希望的是,服务器应该能够将工作分配给多个并行子流程。)
服务器本身应该非常轻量级。我不需要任何 GUI 界面。
如果我以某种方式对其进行设计,这样我以后可以将其与 Hadoop 等 HPC 框架集成,那就太好了。
如果我必须这样做,我需要学习什么样的编程?顺便说一下,我对OOP有很好的理解,我对数据结构和算法有点熟悉,我知道基本的Java(以前从未用Java做过任何网络或多线程编程,但使用过典型的oop概念,泛型,可比的接口等。)。我主要从事数据库编程,但过去也做过很多 C、C++、C#、Python。
鉴于需求和我的背景,请提出建议,
- 我应该如何开始这个项目?构建项目的方法是什么?
- 我应该先创建一些基本的 API 定义,然后再开始处理细节吗?
- 我应该遵循任何特定的设计模式吗?从哪里学习?
- 我需要在 Java 中学习哪些内容以及从哪里学习这些内容?
- 在内存中读取大量数据的最佳方法是什么? Java nio 是好的解决方案吗?
- 如果我用大量数据实例化一个类,它会工作吗? (例如,假设我有一个 Vector 类来表示具有数百万个元素的矩阵,并且该类的构造函数读取内存中的大量数据集)。最好的处理方法是什么?
【问题讨论】:
-
当“大数据”已经以 TB 到 PB 为单位衡量时,700 GB 并不是“巨大”...您为什么不立即开始使用 Hadoop?
标签: java multithreading design-patterns data-mining hpc