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