MOM(面向消息的中间件)解决了什么问题?可扩展性?积分?
他们通常使用哪个域,哪些域通常不使用?
例如,谷歌是否使用此类解决方案作为其主要搜索引擎或为GMail提供支持?
那么大型网站如沃尔玛,eBay,FedEx(几乎是一家Java商店)和buy.com(几乎是MS商店)呢?妈妈是否解决了那里的需求?
当你编写一个控制服务器端的Web应用程序并且拥有一个同质环境(比如数十个所有运行Linux + Java JVM的Amazon EC2实例)以及客户端(Web浏览器)时,它是否有意义?
对于需要与服务器通信的桌面应用程序是否有意义?
或者,对于大型企业而言,它通常是由无数不同系统组成的快乐组合,需要以某种方式进行通信?
我对它们有用的东西感到有点困惑,我认为通过它们适合的地方以及它们不合适的地方,我可以更好地理解它们的用途.
我正在努力了解REST.在REST下,GET不能在服务器上触发事务性事务(这是每个人都同意的定义,它是REST的基础).
所以,想象一下你有一个网站就像 stackoverflow.com(我说的喜欢,所以如果我有这么错了,它不会改变任何东西我的问题的底层细节),其中每次有人读一个问题,使用GET,也就是一些显示"此问题已被阅读256次".
现在有人读了那个问题.计数器现在是257.GET 是事务性的,因为视图的数量增加了,现在又增加了."数量的视图"在数据库中递增,没有争论(例如,在SO上,始终显示任何问题被查看的时间).
那么,REST GET是否与网站中任何类似"视图数量"的功能根本不兼容?
因此,如果SO主页停止显示使用GET访问的纯HTML链接或停止显示"此问题已被查看x次",那么它应该是"RESTFUL"吗?
因为增加DB中的计数器是事务性的,因此"不稳定"?
编辑只是为了人们谷歌搜索这可以获得一些指示:
来自http://www.xfront.com/REST-Web-Services.html:
4.通过HTTP GET可访问的所有资源都应该是无副作用的.也就是说,请求应该只返回资源的表示.调用资源不应导致修改资源.
现在对我来说,如果表示包含"视图数量",它就是资源的一部分[并且在SO中"问题的数量"是一个非常重要的信息]并且访问它肯定会修改资源.
这与您可以在Amazon S3资源上创建的真实RESTFUL HTTP GET形成鲜明对比,在这种情况下,您的GET保证不会修改您获得的资源.
但后来我仍然很困惑.
以下方法/技术的名称是什么(我将尝试描述我能做的最好的事情,可能需要了解"memoization"的背景知道为什么这种技术非常有用):
你开始一些潜在的长度异步计算,你意识到相同的计算已经开始但尚未完成,你在第一次计算时"捎带".然后,当第一个计算结束时,它不会发出一个而是两个回调.
目标是不要不必要地开始第二次计算,因为你知道已经有相同的计算运行.
请注意,尽管并非完全不同,但我并不是在寻找"memoization"的特殊缓存情况:memoization就是当你开始计算并找到已经完成的相同计算的缓存(memoized)结果时你可以重用.
在这里,我正在寻找技术的名称,其方式与memoization有点类似(因为它可能对于memoization是一种有用的技术的某些原因很有用),除了它重用了结果第一次计算,即使在您发出第二次计算时尚未完成第一次计算.
我一直称这种技术为"捎带",但我不知道这是否正确.
我实际上不止一次使用它作为某种"类固醇的记忆",它非常方便.
我只是不知道这个(先进的?)技术的名称是什么.
编辑
该死的,我想评论一下epatel的答案,但它消失了.epatel的回答给了我一个想法,这种技术可以称为"懒惰的记忆" :)
我需要存储一个大的哈希集,能够包含多达大约2亿个40位值.将其存储为2亿64位值是可以接受的(尽管有2亿*16位丢失).
要求是:
微小的内存占用(磁盘空间不是问题,内存是)
快速contains(long l)和add(long l)方法(比SQL快得多)
嵌入式
免费且没有讨厌的许可(没有Berkeley DB).LGPL很好.
没有误报,也没有假阴性,所以像基于磁盘的布隆过滤器这样的东西不是我追求的
SQL 不是我追求的.
因为我真的觉得我的东西后更快速的像这样的(注意解决方案如何比SQL解决方案快得多):
Google有这样的Java API吗?
基于磁盘的快速键/值对实现我只使用"密钥"工作吗?
或者是其他东西?
我宁愿不重新发明.
这里的第一个问题:在Java中它是一个非常短暂但基本的东西,我不知道......
在下面的例子中,该run()方法是否以某种方式执行了somemethod()获取的锁?
public synchronized void somemethod() {
Thread t = new Thread( new Runnable() {
void run() {
... <-- is a lock held here ?
}
}
t.start();
...
(lengthy stuff performed here, keeping the lock held)
...
}
Run Code Online (Sandbox Code Playgroud) 我有一个中等大小的数据集,大约800 MB左右,这基本上是一个很大的预计算表,我需要将一些计算加速几个数量级(创建该文件需要几个mutlicores计算机天来使用优化生成和多线程算法......我真的需要那个文件).
现在已经计算了一次,那么800MB的数据是只读的.
我无法忍受它在记忆中.
截至目前,它是一个巨大的800MB文件,但如果可以提供帮助,拆分成较小的文件不是问题.
我需要在该文件中读取大约32位数据的大量时间.我不知道在哪里我需要读取这些数据:读取是均匀分布的.
在这样的文件或文件中随机读取Java的最快方法是什么?理想情况下,我应该从几个不相关的线程进行这些读取(但如果需要,我可以在单个线程中对读取进行排队).
Java NIO是可行的吗?
我不熟悉'内存映射文件':我想我不想在内存中映射800 MB.
我想要的只是访问这些800MB基于磁盘的数据的最快随机读取.
顺便说一下,如果人们想知道这与我不久前提出的问题完全不同:
如何跟踪JFrame本身的移动?我想注册一个每次回调都会JFrame.getLocation()返回一个新值的监听器.
编辑这是一个代码,显示接受的答案正在解决我的问题:
import javax.swing.*;
public class SO {
public static void main( String[] args ) throws Exception {
SwingUtilities.invokeAndWait( new Runnable() {
public void run() {
final JFrame jf = new JFrame();
final JPanel jp = new JPanel();
final JLabel jl = new JLabel();
updateText( jf, jl );
jp.add( jl );
jf.add( jp );
jf.pack();
jf.setVisible( true );
jf.addComponentListener( new ComponentListener() {
public void componentResized( ComponentEvent e ) {}
public void componentMoved( ComponentEvent e ) {
updateText( …Run Code Online (Sandbox Code Playgroud)