假设我有一个完整的任务队列,我需要提交给执行程序服务.我希望他们一次处理一个.我能想到的最简单的方法是:
但是,我试图完全避免阻塞.如果我有10,000个这样的队列,需要一次处理一个任务,我将耗尽堆栈空间,因为它们中的大多数将保持被阻塞的线程.
我想要的是提交一个任务并提供一个在任务完成时调用的回调.我将使用该回叫通知作为发送下一个任务的标志.(functionaljava和jetlang显然使用了这种非阻塞算法,但我无法理解他们的代码)
如何使用JDK的java.util.concurrent,而不是编写自己的执行器服务?
(向我提供这些任务的队列本身可以阻止,但这是一个需要解决的问题)
假设我有一个非常简单的java对象,它只有一些getXXX和setXXX属性.此对象仅用于处理值,基本上是记录或类型安全(和性能)映射.我经常需要将此对象转换为键值对(字符串或类型安全)或从键值对转换为此对象.
除了反射或手动编写代码来进行此转换之外,实现此目的的最佳方法是什么?
一个示例可能是通过jms发送此对象,而不使用ObjectMessage类型(或将传入消息转换为正确类型的对象).
我试图弄清楚这些新的数据存储如bigtable,hbase和cassandra到底是什么.
我处理大量的股票市场数据,数十亿行价格/报价数据,每天可以累计达到100千兆字节(尽管这些文本文件通常压缩至少一个数量级).这个数据基本上是一些数字,两个或三个短字符串和一个时间戳(通常是毫秒级).如果我必须为每一行选择一个唯一的标识符,我将不得不选择整行(因为交换可能会在同一毫秒内为同一个符号生成多个值).
我想将这些数据映射到bigtable(我包括它的衍生物)的最简单方法是按符号名称和日期(这可能会返回一个非常大的时间序列,超过百万个数据点并非闻所未闻).通过阅读他们的描述,看起来这些系统可以使用多个密钥.我还假设十进制数不是键的好选择.
其中一些系统(例如Cassandra)声称能够进行范围查询.在给定的一天,上午11:00到下午1:30之间,我是否能够有效地查询MSFT的所有值?
如果我想搜索给定日期的所有符号,并请求价格在10美元到10.25美元之间的所有符号,那么该怎么办?所以我正在搜索这些值,并希望返回键作为结果?
如果我想得到两个系列,从另一个中减去一个,并返回两次系列及其结果,我将在自己的程序中做他的逻辑怎么办?
阅读相关论文似乎表明这些系统不适合大规模时间序列系统.但是,如果谷歌地图等系统基于它们,我认为时间序列也应该有效.例如,将时间视为x轴,将价格视为y轴,将符号视为命名位置 - 突然之间看起来像bigtable应该是时间序列的理想存储(如果整个地球可以存储,检索,放大和注释,股市数据应该是微不足道的).
有些专家可以指出我正确的方向或澄清任何误解.
谢谢
我过去几天一直在玩node.js(nodejs),这太棒了.据我所知,lua没有类似的libev和libio集成,让我们可以避免几乎任何阻塞调用,并以异步方式与网络和文件系统进行交互.
我正在慢慢地将我的java实现移植到nodejs,但是我很震惊luajit比v8 JavaScript快得多并且使用的内存要少得多!
我想在这样的环境中编写我的服务器(非常快速和响应,内存使用率非常低,非常有表现力)将极大地改善我的项目.
作为lua的新手,我只是不确定是否存在这样的事情.我会感激任何指针.
谢谢
我的理解是Spark是Hadoop的替代品.但是,在尝试安装Spark时,安装页面会要求安装现有的Hadoop.我无法找到任何澄清这种关系的东西.
其次,Spark显然与Cassandra和Hive有良好的连接.两者都有sql风格的界面.但是,Spark有自己的sql.为什么人们会使用Cassandra/Hive而不是Spark的原生sql?假设这是一个没有现有安装的全新项目?
我从来没有使用分布式缓存/ DHT,如memcached,jboss缓存,ehcache等.我想知道哪些,如果有的话,适合我的使用.
首先,我不是在做Web应用程序(因为大多数这些项目似乎都面向Web应用程序).我为金融交易公司编写服务器(实际上是订单管理系统).服务器本身并不复杂.他们需要接收信息(市场数据,订单,执行等)将它们发送到目的地,同时可能转换其中一些消息.
我正在研究这些产品以解决以下问题:
安全的服务器状态存储库.我宁愿将我的应用程序的逻辑构建为一堆变换器(类似于Apache Camel)并将状态存储在"安全"的位置
应该分发这个存储库:如果这些数据中的一个存储崩溃,那么应该有一个或两个存储崩溃,我应该能够无缝切换到它们
这个存储库应该很快.这里使用单位数毫秒,换句话说,使用/处理此数据的系统是自动化系统,而不是人类点击链接.该系统需要具有高吞吐量和低延迟.通过在进程外发送我的数据,我必然会降低性能,但我试图平衡绝对原始速度和绝对数据保护.
这个存储库应该是安全的.与几个在线备份相似,该系统需要将数据写入磁盘(可能多于一个磁盘).
我真的想停止编写自己的"交易服务器".我是否正确地研究诸如jboss cache,ehcache等项目?
谢谢
我很好奇其他人是如何解决这个问题的,以及天真解决方案背后可能存在的问题:
我有一个处理股市数据的系统.有数以万计的符号,以及相关的价格/大小,以每毫秒几千的速率流入系统.
需要在每个tick上进行的基本操作之一是字符串比较,以查看传入是否匹配我们感兴趣的符号.在如此高的频率下,这些字符串比较的优化可以使整个系统的性能产生可测量的差异.
我正在考虑生成符号字符串的哈希值,并将其与记录一起存储.对于后续比较,系统应使用此哈希(为int或long,比较应该是单个操作,而不是遍历字符串的每个字符,直到找到不匹配).
让我们忽略生成散列本身的成本(实际上,这可能实际上是禁止的).我能看到的唯一问题是,对于大量唯一符号,哈希冲突(两个单独的符号生成相同的哈希)将是毁灭性的.是否有一个散列算法可以保证匹配某些约束的字符串(例如字符数限制)是唯一的?
编辑:我将用Java编写此代码.不确定hashCode的(碰撞)质量或计算速度.
我试图了解当服务器发布(通过tcp,udp等)比客户端可以使用数据更快时会发生什么.
在一个程序中,我理解如果队列位于生产者和消费者之间,它将开始变大.如果没有队列,那么生产者将无法生产任何新的东西,直到消费者可以消费(我知道可能有更多的变化).
我不清楚当数据离开服务器(可能是不同的进程,机器或数据中心)并发送到客户端时会发生什么.如果客户端根本无法足够快地响应传入数据,假设服务器和消费者耦合非常松散,那么飞行中数据会发生什么?
我在哪里可以阅读以获取有关此主题的详细信息?我只需要阅读TCP/UDP的低级细节吗?
谢谢
如何通过在任意数量的列中显示我的代码来编辑我的代码?
我的笔记本电脑和台式机显示器是宽屏的(我怀疑在过去的5年或10年中制造的大多数显示器都是如此!).当我打开任何编辑器全屏时,超过一半的屏幕是完全空的.我希望能够通过将其分成两列或三列来有效地使用屏幕的其余部分,这样我就可以在一个屏幕上看到更多的代码.
坦率地说,除了Word之外,我很惊讶,我从未在任何编辑器中看到过这个功能.
我发现以下页面(http://vim.wikia.com/wiki/View_text_file_in_two_columns)似乎做了我想要的,但我真的不明白他们的建议.我确实设置了列并滚动绑定,但这似乎没有做任何事情.
我通常不使用VIM,但如果我可以访问此功能,我会愉快地切换.我目前在Ubuntu 10.10(gnome)上.vim的默认版本似乎是7.2 /usr/bin/vim.gnome
java ×3
cassandra ×2
actor ×1
algorithm ×1
apache-spark ×1
bigtable ×1
caching ×1
callback ×1
collections ×1
comparison ×1
concurrency ×1
dht ×1
executor ×1
finance ×1
hadoop ×1
hash ×1
hbase ×1
javabeans ×1
latency ×1
libevent ×1
lua ×1
networking ×1
node.js ×1
notify ×1
reflection ×1
sockets ×1
string ×1
tcp ×1
time-series ×1
trading ×1
udp ×1
vi ×1
vim ×1