小编ste*_*esu的帖子

MySQL在值更改时插入新行

对于我正在进行的个人项目,我想在Steam,Impulse,EA Origins和其他几个站点上制作游戏价格线图.目前,我已经修改了SteamCalculator.com使用的脚本,以记录每个国家/地区代码中的每个游戏或每个网站的当前价格(如果适用的话,销售价格).我还有一个列存储价格的日期.我当前的表看起来像这样:

THIS STRUCTURE IS NO LONGER VALID. SEE BELOW
+----------+------+------+------+------+------+------+------------+
| steam_id |  us  |  at  |  au  |  de  |  no  |  uk  |    date    |
+----------+------+------+------+------+------+------+------------+
|  112233  |  999 |  899 |  999 | NULL |  899 |  699 |  2011-8-21 |
|  123456  | 1999 |  999 | 1999 |  999 |  999 |  999 |  2011-8-20 |
|    ...   |  ... |  ... |  ... |  ... |  ... |  ... |     ...    | …
Run Code Online (Sandbox Code Playgroud)

mysql sql perl sql-update

2
推荐指数
1
解决办法
2424
查看次数

承诺版本的"while"循环?

我来实现,由于在ECMAScript中6承诺允许异步功能同步编码,对于每一个代码的承诺载货件有一个同步的必然结果.例如:

var data = processData(JSON.parse(readFile(getFileName())));
Run Code Online (Sandbox Code Playgroud)

是相同的:

var data = getFileName()
    .then(readFile)
    .then(JSON.parse)
    .then(processData);
Run Code Online (Sandbox Code Playgroud)

现在,对于我目前的用例,我想编写代码来从大量的公共API中提取数据.API是分页的,所以在纯粹的同步世界中,我会写如下内容:

var data = [];
var offset = 0;
var total = 10000; // For example - not actually how this would work
while( offset < total ) {
    data.concat(getDataFromAPI(offset));
    offset = data.length;
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如何用承诺做到这一点?我可以这样写:

var data = [];
var offset = 0;
var total = 10000;
getDataFromAPI(offset)
    .then(function(newData){
        data.concat(newData);
        return getDataFromAPI(data.length);
    });
Run Code Online (Sandbox Code Playgroud)

但在这一点上,我被迫只是链接无限.thens - 没有循环逻辑.我觉得应该可以使用递归,但我不知道如何做到这一点.

我使用BluebirdJS作为我的诺言库,所以我可以访问他们所有的帮助方法.

javascript node.js promise bluebird

2
推荐指数
1
解决办法
123
查看次数

让本地主机跟踪原始主机

我的 git 存储库现在处于一个有点奇怪的地方,所以让我解释一下我是如何到达这里的......

  1. cd /var
  2. git clone https://github.com/..... www
  3. cd www
  4. 意识到我想把网站放在 www 的子目录中
  5. mkdir my-site
  6. mv !(my-site) my-site
  7. cd my-site

现在,当我运行时git status,它声称每个文件都已被删除,并且该my-site文件夹没有被跟踪。有点道理:我移动了每个文件

为了尝试纠正这个问题,我执行了以下操作:

  1. git init-- 在“我的网站”中创建一个新的存储库
  2. git remote add origin https://github.com/.....-- 使这个仓库成为我的起源的“克隆”
  3. git fetch --all-- 确保我了解最近的提交
  4. git branch -u origin/master master-- 告诉我的本地 master 跟踪 origin master

当我这样做时,我收到以下错误:

fatal: branch 'master' does not exist
Run Code Online (Sandbox Code Playgroud)

跑步git status给了我以下内容:

On branch master

Initial commit

Untracked files:
  (use "git add <file>..." …
Run Code Online (Sandbox Code Playgroud)

git version-control github

2
推荐指数
1
解决办法
5969
查看次数

删除 MultiIndex 中带有重复项的 NaN 行

使用重现我的确切问题的 DataFrame 进行更新

我有一个问题,NaN出现在索引中会导致非唯一行(自NaN !== NaN)。我需要删除NaN索引中出现的所有行。我之前的问题有一个带有单行的示例 DataFrame NaN,但是原始解决方案没有解决我的问题,因为它没有满足这个广告不佳的要求:

(请注意,在实际数据中,我有数千个这样的行,包括重复的行,因此NaN !== NaN这在索引上是允许的)

(来自我原来的帖子)

问题

>>>import pandas as pd
>>>import numpy as np
>>> df = pd.DataFrame([[1,1,"a"],[1,2,"b"],[1,3,"c"],[1,np.nan,"x"],[1,np.nan,"x"],[1,np.nan,"x"],[2,1,"d"],[2,2,"e"],[np.nan,1,"x"],[np.nan,2,"x"],[np.nan,1,"x"]], columns=["a","b","c"])
>>>df
         c
a   b
1.0 1.0  a
    2.0  b
    3.0  c
    NaN  x
    NaN  x
    NaN  x
2.0 1.0  d
    2.0  e
NaN 1.0  x
    2.0  x
    1.0  x
Run Code Online (Sandbox Code Playgroud)

注意重复的行:(1.0, NaN)(NaN, 1.0)

失败的解决方案:

我尝试过一些简单的事情,例如:

>>>df = df[pandas.notnull(df.index)]
Run Code Online (Sandbox Code Playgroud)

但这会失败,因为notnull没有针对 MultiIndex 实现。 …

python nan multi-index dataframe pandas

2
推荐指数
1
解决办法
2591
查看次数

nginx可以多行登录吗?

我正在将日志发送到 nginx 服务器并希望将这些日志转储到文件中。当一次发送一个日志时,我可以使用 NginxEchoModule 强制 nginx 读取正文,如下所示:

http {
    log_format log_dump '$request_body';
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
        access_log /logs/dump log_dump;
        location /logs {
            echo_read_request_body;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我一次发送一个日志时,这工作得很好:

POST /logs HTTP/1.1
Host: www.example.com

123456 index.html was accessed by 127.0.0.1

POST /logs HTTP/1.1
Host: www.example.com

123457 favicon.ico was accessed by 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试批处理日志时(以避免连接开销和 HTTP 标头开销):

POST /logs HTTP/1.1
Host: www.example.com

123456 index.html was accessed by 127.0.0.1
123457 favicon.ico was accessed by 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

这是我的日志文件中显示的内容:

123456 index.html was accessed by 127.0.0.1\x0A123457 …
Run Code Online (Sandbox Code Playgroud)

nginx

2
推荐指数
1
解决办法
2159
查看次数

尝试运行`.size()`方法时ArrayList抛出`ConcurrentModificationException`

更新资料

正如Jiri Tousek所指出的那样,我的代码中抛出的错误误导了许多业余(和经验丰富)的Java开发人员。相反的是名字似乎暗示,ConcurrentModificationException不能有任何与多线程。考虑以下代码:

import java.util.List;
import java.util.ArrayList;

class Main {
  public static void main(String[] args) {
    List<String> originalArray = new ArrayList<>();
    originalArray.add("foo");
    originalArray.add("bar");
    List<String> arraySlice = originalArray.subList(0, 1);
    originalArray.remove(0);
    System.out.println(Integer.toString(arraySlice.size()));
  }
}
Run Code Online (Sandbox Code Playgroud)

ConcurrentModificationException尽管不涉及线程,但这将抛出一个错误。

误导性的异常名称使我认为我的问题是我处理多线程的结果。我已用实际问题更新了帖子标题。

原文(标题:如何通知Java您已完成对线程中ArrayList的修改?)

我的代码大致如下所示:

class MessageQueue {
    private List<String> messages = new ArrayList<>();
    private List<String> messagesInFlight = new ArrayList<>();

    public void add(String message) {
        messages.add(message);
    }

    public void send() {
        if (messagesInFlight.size() > 0) {
            // Wait for previous request to …
Run Code Online (Sandbox Code Playgroud)

java

2
推荐指数
1
解决办法
83
查看次数

各种Minikube + Kubernetes IP地址有什么区别?

我试图理解 Kubernetes,以便我可以开始使用它进行本地开发,但我在这里遇到了一些基础知识......

我在 Mac OS X 上运行,并使用 Homebrew 通过brew install kubernetes. 之后,我启动了一个简单的应用程序(部署?服务?——我不清楚术语),如下所示:

$> minikube start
$> kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
$> kubectl expose deployment hello-minikube --type=NodePort --port=8080
Run Code Online (Sandbox Code Playgroud)

我直接从Kubernetes 文档获取这些命令

现在,每一步我都在尝试阅读 Kubernetes 文档并尝试使用各种命令行工具,这样我就不会盲目跟随,而是真正理解正在发生的事情。这就是我遇到的第一个巨大障碍:IP 地址太多!

$> ifconfig
...
        inet 192.168.2.126 netmask 0xffffff00 broadcast 192.168.2.255
...
$> minikube ip
192.168.64.3
$> kubectl describe pods
...
IP:          172.17.0.2
...
$> kubectl describe services
...
IP:                    10.96.8.59
...
Run Code Online (Sandbox Code Playgroud)

我了解其中几个:

  • 192.168.2.126 是我的本地计算机在网络上的 IP 地址,这是网络上的另一台计算机访问我的计算机的方式(例如,如果我正在运行 nginx 或其他东西)
  • 192.168.64.3 是分配给 Minikube 运行的虚拟机的 IP …

docker kubernetes kubectl minikube

2
推荐指数
1
解决办法
1257
查看次数

如何在AWS中高效聚合数十亿条单独记录中的数据?

在高/理论水平上,我确切地知道我想要构建的架构类型以及它将如何工作,但我试图使用 AWS 服务尽可能便宜地构建它,而我对 AWS 产品的不熟悉让我围着圈跑。

数据

我们运营一个视频流平台。在繁忙的夜晚,我们会同时进行约 100 个直播,观看人数超过 30,000 人。我们预计这个数字在未来几年内将增至 100,000。直播平均持续 2 小时。

我们每 10 秒从播放器发送一次心跳,其中包含有关观看者的信息 - 他们观看了多少数据、他们缓冲了多少数据、他们的流媒体质量如何,等等。

这些心跳直接发送到 AWS Kinesis 终端节点。

最后,我们希望将所有过去的消息保留至少 5 年(希望更长),以便我们可以查看历史分析。

一些粗略计算表明,五年后我们将拥有 0.1 * 60 * 60 * 2 * 100000 * 365 * 5 = 1310亿条心跳消息。

我们的旧管道

我们的旧系统只有一个 Kinesis 消费者。聚合数据存储在 DynamoDB 中。每当消息到达时,我们都会从 DynamoDB 读取记录,更新记录,然后写回新记录。这种读取-更新-写入循环限制了我们处理消息的速度,并且使得每个传入的消息都依赖于它之前的消息,因此它们无法并行处理。

这种设置的部分原因是我们的消息模式从一开始就设计得不好。我们发送消息发送的时间戳,但我们不发送“自上次心跳以来观看的视频量”。因此,为了计算总观看时间,我们需要查找该播放器发送的最后一条心跳消息,减去时间戳,然后添加值。许多其他指标也存在类似的问题。

我们的新管道

我们已经开始遇到扩展问题。在高峰时段,在等待处理积压的消息时,分析可能会延迟多达四个小时。如果积压达到 24 小时,Kinesis 将开始删除数据。因此,我们需要修复管道以消除对过去消息的依赖,以便我们可以并行处理它们。

第一部分是更新我们的玩家发送的消息。我们的新规范仅包含可以简单求和而无需减法的指标。因此,例如,我们可以继续添加“查看时间”指标,而不考虑过去的消息。

第二部分是确保 Kinesis 永远不会备份。我们在原始消息到达后立即将其转储到 S3,无需进行任何处理(Kinesis Data Fire Hose),以便我们可以在闲暇时对它们进行分析。

最后,我们现在希望尽快从这些分析中实际提取信息。这就是我遇到了障碍的地方。

我们想要回答的问题

由于这是一个分析管道,我们的问题主要围绕过滤这些消息,然后聚合剩余消息的字段(可能,实际上很可能,通过分组)。例如:

有多少 Android 用户观看了昨晚的高清直播?(按流和操作系统过滤)

所有用户的平均带宽使用情况是多少?(SUM 和 COUNT,稍后可以在仪表板端完成最终聚合的划分)

去年使用 Apple 设备(iOS、tvOS 等)的用户比例是多少?(COUNT,按操作系统分组) …

analytics amazon-web-services amazon-emr amazon-redshift amazon-athena

2
推荐指数
1
解决办法
2075
查看次数

Laravel:WHERE子句中的数学

在SQL中,执行以下操作非常简单:

SELECT * FROM properties WHERE (price / acres) = 3000;
Run Code Online (Sandbox Code Playgroud)

这将选择"每英亩价格"为3000的每个房产

我希望在Laravel这样做.我尝试了以下方法:

Property::where('price / acres', 3000)->get();
Run Code Online (Sandbox Code Playgroud)

但是,这会在反引号中包含列标题,从而创建以下SQL:

select * from `properties` where `price / acres` = 3000
Run Code Online (Sandbox Code Playgroud)

这显然失败了(显然)错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'price / acres' in 'where clause'

php mysql orm laravel eloquent

1
推荐指数
1
解决办法
1011
查看次数

如何在Python类中"命名空间"方法

我想要一个Python类,其中包含如下界面:

import myclass

client = myclass.Client("user", "password")

client.users.create("user1")
client.posts.create("user1", "Hello, World!")
Run Code Online (Sandbox Code Playgroud)

请注意,而不是只是create_usercreate_post,我想使用两个点指定方法:users.create/posts.create

我希望这个特定的接口模仿我正在尝试使用的HTTP API(其端点如"/ api/users/create"和"/ api/posts/create")

如果我在下面定义我的类myclass.py:

class Client(object):
    def __init__(self, user, pass):
        self.user = user
        self.pass = pass
Run Code Online (Sandbox Code Playgroud)

那我该如何创建这些点名称空间的方法呢?我的第一个想法是创建类似的子类:

class Client(object):
    def __init__(self, user, pass):
        self.user = user
        self.pass = pass
        self.users = ClientUserAPI()
        self.posts = ClientPostAPI()

class ClientUserAPI(object):
    def create(self):
        # Do some cURL magic

class ClientPostAPI(object):
    def create(self):
        # Do some cURL magic
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,那么我遇到两个问题之一(一个严重,另一个只是哲学/意识形态)

  1. 如果ClientUserAPI扩展"Client",则该__init__ …

python namespaces class

1
推荐指数
1
解决办法
972
查看次数