处理删除或启用/删除行及其引用表的最佳实践是什么?
例如,假设我有一个非常简单的'论坛'应用程序.
我有一个users包含我的webapp帐户的表,其中threads包含用户创建的线程,以及一个comments包含用户对线程评论的注释的表.
现在,假设在注册时我想在激活其帐户之前验证用户的电子邮件.这是最好的方法吗?什么是最佳做法?也许通过一个只返回带字段的行的视图is_active=true?使用2个分离的表pre_users(包含仍需要验证的用户)和users(经过验证的表)?
同样,您将如何处理想要暂停其帐户的用户?它的主题和评论?您是否会添加另一个标志is_suspended,并更新视图以考虑该标志?如果它不是一个视图,而是两个单独的表,我怎么能处理引用呢?
另外,删除一个帖子.假设在线程删除时我不希望实际删除该线程,因为我不希望发布注释的用户突然看不到他们的注释.怎么处理这个?
这类问题的最佳做法是什么?
我正在从事一个处理大量数据的项目。我有很多(数千个)zip 文件,每个文件都包含一个简单的 txt 文件,其中包含数千行(大约 80k 行)。我目前正在做的事情如下:
for(File zipFile: dir.listFiles()){
ZipFile zf = new ZipFile(zipFile);
ZipEntry ze = (ZipEntry) zf.entries().nextElement();
BufferedReader in = new BufferedReader(new InputStreamReader(zf.getInputStream(ze)));
...
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我可以逐行读取文件,但它确实太慢了。鉴于需要读取大量文件和行,我需要以更有效的方式读取它们。
我一直在寻找不同的方法,但我还没有找到任何东西。我认为我应该使用适用于密集型 I/O 操作的 java nio API,但我不知道如何将它们与 zip 文件一起使用。
任何帮助将不胜感激。
谢谢,
马可
我正在实施一个需要聚集地理点的项目.OPTICS算法似乎是一个非常好的解决方案.它只需要2个参数作为输入(MinPts和Epsilon),它们分别是将它们视为一个簇所需的最小点数,并且用于比较两个点所在的距离值是否可以放在同一个簇中.
我的问题是,由于各种各样的点,我不能设置固定的epsilon.请看下面的图片.
问题http://s13.postimage.org/u5a08nwvb/Immagine.png
相同的点结构但是在不同的比例下将导致非常不同.假设设置MinPts = 2和epsilon = 1Km.在左侧,算法将创建2个群集(红色和蓝色),但在右侧,它将创建一个包含所有点(红色)的单个群集,但我想在右侧获得2个群集.
所以我的问题是:有没有办法动态计算epsilon值来得到这个结果?
编辑2012年6月5日3.15pm: 我以为我正在使用javaml库中的OPTICS算法实现,但它似乎实际上是一个DBSCAN算法实现.所以现在的问题是:有没有人知道基于java的OPTICS算法实现?
非常感谢你,请原谅我的英语不好.
马尔科
java algorithm cluster-analysis data-mining optics-algorithm
Promise.all([iterable])要么全有,要么全无,这意味着当可迭代中的每个 Promise 解析时,它返回的 Promise 都会解析,或者一旦其中一个 Promise 拒绝,它就会拒绝,原因是第一个 Promise 拒绝 ( doc)。
但是如果可迭代拒绝的多个承诺会发生什么?
在 VSCode 中,我尝试了以下示例,并故意使foo()和bar()承诺失败。当我在 VSCode 中调试时,我在 * catch(err => Promise.reject('error query bar()'))* 上收到错误,说发生了异常,但我不明白为什么。
我认为这是因为当我调用 Promise.reject 时,Promise.all 已经收到来自 foo 函数的拒绝,该函数也失败了,但不清楚发生了什么。
如果我在调试选项中禁用“未捕获的异常”断点,则异常将不再显示。
这里到底发生了什么?
function foo() {
return pool.query('insert_test into test (value) values (20)')
.then(() => client.query('insert into test (value) values (21)'))
.catch(err => Promise.reject('error query bar()'))
}
function bar() {
return pool.query('insert_test into test (value) values (20)')
.then(() => client.query('insert into …Run Code Online (Sandbox Code Playgroud) 我无法停止并因此删除应用引擎版本.目前我有3个不同的版本,在相同的默认服务下:
gappa-v1,目前正在提供100%的流量mg-v1,目前已停止20170223t163224我能够停止,重新启动和删除所有版本,但20170223t163224版本.我已尝试过所有内容,包括Google云端控制台和gcloud命令行工具.从Google云端控制台进行交互有点无用,因为它没有给我任何关于错误的反馈,但只是一个通用无法在停止尝试时停止版本或者在删除尝试时无法删除该版本.
在与gcloud命令行工具交互时,我尝试过:
$> gcloud app versions stop `20170223t163224`
$> ERROR: (gcloud.app.versions.stop) INTERNAL: This flexible version cannot be modified, it can only be deleted.
Run Code Online (Sandbox Code Playgroud)
然后,如果我尝试删除它:
$> gcloud app versions delete `20170223t163224`
$> [default/20170223t163224]: Error Response: [13] Deployment Manager operation failed, name: operation-1488895382516-54a247861f121-d456a139-0b1e3fc6, error: [{"code":"RESOURCE_ERROR","locati
on":"/deployments/aef-default-20170223t163224/resources/aef-default-20170223t163224-00","message":"{\"ResourceType\":\"compute.beta.regionInstanceGroupManager\",\"ResourceErrorCode\":\"400
\",\"ResourceErrorMessage\":{\"code\":400,\"errors\":[{\"domain\":\"global\",\"message\":\"The instance_group_manager resource 'aef-default-20170223t163224-00' is already being used by 'ae
f-default-20170223t163224'\",\"reason\":\"resourceInUseByAnotherResource\"}],\"message\":\"The instance_group_manager resource 'aef-default-20170223t163224-00' is already being used by 'ae …Run Code Online (Sandbox Code Playgroud) 假设我有一个 express.js 应用程序,它在localhost:80/api. 假设处理程序必须执行同步操作(我知道这是个坏主意)。现在,假设节点处理请求的速率低于传入请求的速率。
显然,发现节点繁忙的传入请求无法执行。他们最终会在哪里等待?
检查有效DateTime的最快方法是什么? 我不仅需要考虑字符串中的年份,月份,日期,小时和分钟,还要考虑日期时间是否有效,例如:2017-02-29 10:00应被视为无效,因为它是第29位一个非闰年.
我有一个字符串元素数组(300k元素)格式:YYYYMMDDHHmm,我需要以最快的方式检查每一行.
使用moment.js来检查每个元素的有效性需要5s在常规的for循环中:
for (let i = 0; i < length; i++) {
let el = datetimes[i];
let d = moment.utc(el, "YYYYMMDDHHmm");
d.isValid();
}
Run Code Online (Sandbox Code Playgroud)
有更快的替代品吗?
我的经验:在发布/订阅场景中,如果订阅者收到一条消息,这条收到的消息会立即重新排在队列的前面,这将是订阅者收到的下一条消息。
有没有办法避免这种情况?是否有可能以下一条消息肯定不是刚刚收到的消息的方式来处理消息?
我正在使用 Node.js 和amqp.node与 RabbitMQ 通信
你好,Stackoverflowers!
当我编写一个项目时,我想知道如果我必须访问/编辑大量数据,哪种数据结构可以让我获得最佳性能?
让我用一个例子来解释一下。我有一个名为 User 的类和一个 Event 类。一个用户可以有许多事件。到目前为止,我已经用ArrayList实现了这种情况:
public class User{
ArrayList<Event> events;
public void process(){
}
...
}
public class Event{
event data like event time etc.
}
Run Code Online (Sandbox Code Playgroud)
由于我有很多用户(数百万),每个用户可能有数千个事件,而且,我必须使用 process() 方法访问用户的每个事件,我认为使用 HashMaps 等结构不会有帮助(如果错了请告诉我)。然而,很明显,有了这么多的元素,就需要良好的性能。
那么,您认为处理事件最快的数据结构是什么?
非常感谢,
马可.
我正在学习 C++,我必须以二进制模式读取文件。我的做法如下(遵循 C++ 参考):
unsigned values[255];
unsigned total;
ifstream in ("test.txt", ifstream::binary);
while(in.good()){
unsigned val = in.get();
if(in.good()){
values[val]++;
total++;
cout << val <<endl;
}
}
in.close();
Run Code Online (Sandbox Code Playgroud)
所以,我正在逐字节读取文件,直到in.good()为真。我cout在末尾添加了一些内容,while以便了解发生了什么,这是输出:
marco@iceland:~/workspace/huffman$ ./main
97
97
97
97
10
98
98
10
99
99
99
99
10
100
100
10
101
101
10
221497852
marco@iceland:~/workspace/huffman$
Run Code Online (Sandbox Code Playgroud)
现在,输入文件“test.txt”只是:
aaaa
bb
cccc
dd
ee
Run Code Online (Sandbox Code Playgroud)
所以一切都很完美,直到最后,也就是 221497852。我猜这是关于文件末尾的问题,但我无法找出问题所在。
我在 debian 机器(64 位)上使用 gedit 和 g++。任何帮助将不胜感激。
非常感谢,
马可
我正在使用Google App Engine,我希望能够根据用户的参数安排作业.
我知道这可以通过cron作业来完成,但从用户的角度看它似乎不允许任何灵活性,但它只允许安排预定义的作业.
例如,假设我有一个新闻应用程序,用户可以订阅不同的主题:我希望管理员能够决定何时发送摘要电子邮件,例如,每天早上8点,我希望他能够编辑这个.
有什么能提供这个吗?
I am developing a NodeJS application using Loopback.
I am pretty new to both nodejs and REST APIs, so please correct me if I am conceptually wrong.
Loopback automatically builds CRUD REST APIs, which is a feature I would like to use in order to avoid to write APIs by myself, but I need to limit users to be able to see only their data.
For example, imagine there are 3 tables in my DB, user, book and a …
我的应用程序不能丢失任何消息。RabbitMQ 做得相当不错,但它并不总是完美无缺的。
将消息标记为持久是不够的。有一个很小的时间窗口,消息可以写入缓存,但不能写入磁盘。如果这里发生了一些事情,比如崩溃(非常不可能),未写入磁盘的消息就会丢失。这是文档中的注释(此处链接)
关于消息持久化的注意事项
将消息标记为持久并不能完全保证消息不会丢失。尽管它告诉 RabbitMQ 将消息保存到磁盘,但 RabbitMQ 已接受消息但尚未保存的时间窗口仍然很短。此外,RabbitMQ 不会对每条消息执行 fsync(2) —— 它可能只是保存到缓存中,而不是真正写入磁盘。持久性保证并不强,但对于我们简单的任务队列来说已经足够了。如果您需要更强的保证,那么您可以使用 publisher recognizes。
发布者确认是保证消息不会丢失所需的机制。
我无法理解如何使用 Node.js 启用此功能,特别是使用amqplib包(github 代码)。在图书馆里挖掘了一下我发现了这个:
var open = require('amqplib').connect();
open.then(function(c) {
c.createConfirmChannel().then(function(ch) {
ch.sendToQueue('foo', new Buffer('foobar'), {},
function(err, ok) {
if (err !== null)
console.warn('Message nacked!');
else
console.log('Message acked');
});
});
});
Run Code Online (Sandbox Code Playgroud)
但我不确定这就是我所需要的。另外,在消费者方面我应该做什么?createConfirmChannel以同样的方式连接,使用?再次创建通道。
node.js ×7
java ×3
performance ×3
javascript ×2
rabbitmq ×2
algorithm ×1
amqp ×1
binaryfiles ×1
c++ ×1
data-mining ×1
database ×1
event-loop ×1
express ×1
io ×1
large-data ×1
linux ×1
loopbackjs ×1
nio ×1
node-pg-pool ×1
promise ×1
sql ×1
zip ×1