小编mis*_*ion的帖子

PDO与MSSQL驱动程序如何获取输出参数?

当您使用PDOMSSQL的驱动程序,你实际使用freetds的低级别的驱动程序.执行存储过程有一些不同的方法 - 语言查询RPC调用.

FreeTDS还支持TDS协议版本4.2和7.x. 它们之间的主要区别之一是存储过程调用的行为.Microsoft将协议4.2中的行为更改为7.0,而不是从语言查询返回输出参数.语言查询主要将文本查询发送到包装到TDS包中的服务器.

使用PDO进行语言查询的示例(来自php.net)

    $stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
    $value = 'Hello!';
    $stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
    $stmt->execute();
    print "The output is $value\n";
Run Code Online (Sandbox Code Playgroud)

实际上你发送的东西就像"EXEC sp_takes ....".如果您使用MSSQL运行上面的示例,您将获得TDS7.х中的空输出参数和4.2的预期结果.为什么我们不能使用4.2并且开心?它有很多局限性:

  • 当然只有ASCII.
  • 不支持RPC和BCP.
  • varchar字段限制为255个字符.如果您的表定义了更长的字段,它们将被截断.
  • prepared statements不支持动态查询(也称为).

所以,4.2不是变种.

RPC调用示例(来自php.net odbtp扩展)

    $stmt = mssql_init('sp_takes_string_returns_string');
    $value = 'Hello!';
    mssql_bind($stmt, 1, $value, SQLVARCHAR, true,  false,   4000);
    mssql_execute($stmt);
    print "The output is $value\n";
Run Code Online (Sandbox Code Playgroud)

使用上面的示例和php中的本机mssql扩展,您可以使用TDS 7.2获得正确的结果.实际上,您使用该代码发送二进制RPC数据包.

是否有任何方法可以使用PDO和MSSQL驱动程序对存储过程进行RPC调用?

php sql-server pdo freetds

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

为什么Windows任务栏自定义任务列表在Windows 10上没有引脚时不起作用?

使用QML JumpList的最小工作示例(如果在c ++中使用QWinJumpList,则行为相同).

import QtQuick 2.3
import QtQuick.Window 2.2
import QtWinExtras 1.0

Window {
    visible: true

    JumpList {
        JumpListCategory {
            visible: true
            title: "Test"

            JumpListLink {
                title: "Test Link"
                executablePath: "http://google.com"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

启动应用程序后,您可以在Windows任务栏中的应用程序上按鼠标右键,并查看如下内容:

应用程序任务栏中的自定义菜单

如果按下Test Link菜单项,则http://google.com应该打开带有url 的默认浏览器,因为它使用shell执行.这在Windows 7,8,8.1中运行良好.

在Windows 10中,当您不用手将应用程序固定到任务栏时,这不起作用.完成此操作后,链接正在运行.

为什么这样以及如何解决?

更新1:这个奇怪的行为在Qt 5.5,5.5.1,5.6和Windows 10上的master分支测试 - 开发,首次发布的家庭版,最终的家,亲.结果是一样的 - 不起作用.此外,例如,chrome使用自定义列表(该site部分),它可以很好地工作而不固定.

更新2:这是我的qt bug QTBUG-49486关于这个并且与它有关QTBUG-48751.但问题是现在Qt开发人员也不知道如何解决这个问题.

c++ windows qt taskbar qml

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

安装tensorflow时出错设置工具

我按照安装说明进行操作:https://www.tensorflow.org/versions/master/get_started/os_setup.html#pip_install

我在Mac OS X 10.11上使用python 2.7.11(Anaconda).我查了但是我的电脑上已经安装了setuptools 18.5.

并遇到了错误

sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.6.0-py2-none-any.whl
The directory '/Users/my_name/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/Users/my_name/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and …
Run Code Online (Sandbox Code Playgroud)

macos pip tensorflow

13
推荐指数
3
解决办法
8251
查看次数

Redis Streams vs Kafka Streams/NATS

Redis团队为Redis 5.0 引入了新的Streams数据类型.由于Streams从第一个视图看起来像Kafka主题,因此找到使用它的真实世界示例似乎很奇怪.

流介绍中,我们与Kafka流进行了比较:

  1. 运行时使用者组处理.例如,如果三个cosumer中的一个永久失败,Redis将继续服务第一和第二因为现在我们只有两个逻辑分区(消费者).
  2. Redis流更快.它们从存储器中存储和操作,因此这是一个案例.

我们与Kafka,RabbitMq和NATS有一些项目.现在我们深入研究Redis流,尝试将其用作"pre kafka cache",在某些情况下使用Kafka/NATS替代方案.现在最关键的一点是复制:

  1. 使用AOF复制将所有数据存储在内存中.
  2. 默认情况下,异步复制不保证复制XADD命令或使用者组状态更改:在故障转移之后,可能会丢失某些内容,具体取决于从服务器从主服务器接收数据的能力.这个看起来像杀死任何兴趣尝试高负荷流.
  3. 由Sentinel或Redis群集运行的Redis故障转移过程仅执行尽力检查以故障转移到最新的从站,并且在某些特定故障下可能会促使缺少某些数据的从站.

和帽子战略.Redis Streams真正的"上限资源"是内存,所以要存储多少项目或使用哪种上限策略并不是那么重要.因此,每当您的消费者失败时,您将获得峰值内存补偿或消息丢失带帽.

我们使用Kafka作为RTB竞标者前端,每秒处理约1,100,000条消息,有效载荷约为120字节.使用Redis,我们在写入时有大约170 mb/sec的内存消耗,而对于512 gb的RAM服务器,我们已经为大约50分钟的数据写了"保留".因此,如果处理系统此时处于脱机状态,我们就会崩溃.

您能否详细介绍一下Redis Streams在现实世界中的用法,有些情况下您可能会尝试自己使用它?或者Redis Streams可能会使用不大量的数据?

redis apache-kafka nats-streaming-server

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

如何使用RabbitMQ限制吞吐量?

问题在哪里:

我们使用RabbitMQ作为任务队列.其中一项具体任务 - 向Vkontakte社交网络发送通知.他们api限制每秒请求和此限制根据您的应用程序大小.只需3个电话就可以获得少于10万人的应用程序,依此类推.所以我们需要人为地限制对他们的服务请求.现在这个逻辑基于应用程序.这很简单,虽然每个队列只能使用一个工作人员,但只需设置睡眠(300毫秒)并保持冷静.但是当你应该使用N个工作者时,这种同步变得微不足道.

如何使用RabbitMQ限制吞吐量?

基于上面的故事.如果可能的话,设置预取大小不仅基于消息,而且基于此逻辑的时间可以非常简单.例如,"每次获取的qos到1条消息不会快于1次,以秒为单位"等等.

  1. 有这样的事吗?
  2. 可能是关于此的其他策略?

message-queue rabbitmq task-queue vk

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

进程派生期间 PHAR 内部损坏(crc32 不匹配)

我是ko-worker库的开发。我添加了 phar 可执行文件作为守护程序应用程序的功能。并发现 phar 和进程分叉 undex linux 的奇怪行为。每次主进程分叉超过 1 个孩子时,我都会遇到这样的错误

include(phar:///opt/www/worker.phar/vendor/path/to/file.php): 
failed to open stream: phar error: internal corruption of phar    

"/opt/www/worker.phar" (crc32 mismatch on file "vendor/path/to/file.php")
in `phar:///opt/www/worker.phar/vendor/composer/ClassLoader.php` line 412
Run Code Online (Sandbox Code Playgroud)

phar的存根(这里原始存根)看起来像

#!/usr/bin/env php
<?php
     Phar::mapPhar('worker.phar');
     require_once 'phar://worker.phar/vendor/autoload.php';

     //Execute next going fork code more then one 1 time
     ...
     $pid = pcntl_fork();
     if ($pid == -1) {
         die('could not fork');
     } else if ($pid) {
        // we are the parent
        ...
     } …
Run Code Online (Sandbox Code Playgroud)

php linux fork phar

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

Pythonic方式在内存中聚合对象属性的有效方式?

例如,我们有大量的对象列表,如下所示:

class KeyStatisticEntry:
    def __init__(self, value=""):
        self.usedBytes = len(value)
        self.encoding = get_string_encoding(value)

    @property
    def total(self):
        overhead = get_object_overhead(self.usedBytes)
        if self.encoding == 'some value':
            return overhead
        else:
            return self.usedBytes + overhead
    @property
    def aligned(self):
        return some_func_with(self.usedBytes)

    # Here is lots of calculated properties on basis of existing properties
Run Code Online (Sandbox Code Playgroud)

我们需要关注这个对象的许多矩阵 - 它的属性的最小值,最大值,总和,平均值,stdev值.目前我使用这样的代码:

used_bytes = [] 
total_bytes = []
aligned_bytes = []
encodings = []

for obj in keys.items():
    used_bytes.append(obj.usedBytes)
    total_bytes.append(obj.total)
    aligned_bytes.append(obj.aligned)
    encodings.append(obj.encoding)

total_elements = len(used_bytes)
used_user = sum(used_bytes)
used_real = sum(total_bytes)
aligned …
Run Code Online (Sandbox Code Playgroud)

python aggregate list

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

批处理文件:检查是否存在带有模式的文件

我有一个奇怪的情况,我不知道有什么问题

我需要检查目录中是否存在至少一个带模式的文件.

IF EXIST d:\*Backup*.* (
   ECHO "file exist"
) ELSE (
   ECHO "file not exist"
)
Run Code Online (Sandbox Code Playgroud)

如果在d:\我有一个文件x_Backup.txt和一个文件夹Backup我得到file exist但是如果我只有文件夹Backup我再次得到file exist,似乎路径中的点被忽略.

windows cmd path batch-file filter

6
推荐指数
3
解决办法
3万
查看次数

如何让 mssql_connect 使用 PHP7 工作?

在使用 PHP7 将 Web 应用程序移植到服务器时,我遇到了一个问题:我无法让 mssql_connect 工作。我发现 mssql 在 PHP7 上不起作用(或永远不会起作用)。

在 Ubuntu(Nginx、php-fpm)上使用 PHP7 连接到 MSSQL 的最快方法是什么?

php ubuntu php-7

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

Qt QML中疯狂字符串数字比较的解决方法

这是Qt(LTS 5.6.2)中的数字比较的疯狂字符串QML JavaScript实现:

console.log("240000000000" == "3776798720");
console.log("240000000000" === "3776798720");
console.log("240000000000" === "3776798721");
Run Code Online (Sandbox Code Playgroud)

输出是:

true
true
false
Run Code Online (Sandbox Code Playgroud)

它看起来像字符串解释为(u)int32和高字节丢失:

240000000000 == 0x37E11D6000
3776798720   ==   0xE11D6000
Run Code Online (Sandbox Code Playgroud)

这个bug也会影响对象:

var g = {};
var h = "240000000000";
g[h] = h + "BUG";
console.log(JSON.stringify(g, null, 2));
console.log(g["3776798720"], g["240000000000"]);
Run Code Online (Sandbox Code Playgroud)

输出:

qml: {
    "3776798720": "240000000000BUG"
}
qml: 240000000000BUG 240000000000BUG
Run Code Online (Sandbox Code Playgroud)

如您所见,钥匙已损坏.该值可以通过两个不同的字符串获得.

有没有选择在没有修补Qt的情况下解决这个问题?或者至少在Qt中可能出现问题的大致位置可以改善自己?

ps这里还有我的同事报告的QTBUG-56830.

javascript qt qml

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

带有通配符字段的 redis hmget

我在 redis 中有一个哈希集,如下所示。

"abcd" : {
    "rec.number.984567": "value1",
    "rec.number.973956": "value2",
    "rec.number.990024": "value3",
    "rec.number.910842": "value4",
    "rec.number.910856": "...",
    "other.abcd.efgh": "some value",
    "other.xyza.blah": "some other value"
    "..." : "...",
    "..." : "...",
    "..." : "...",
    "..." : "..."
}
Run Code Online (Sandbox Code Playgroud)

如果我调用 hgetall abcd,它会给我哈希中的所有字段。我的目标是仅获取哈希集中以“rec.number”开头的字段。当我打电话时

  redis-cli hmget "abcd" "rec.number*", 
Run Code Online (Sandbox Code Playgroud)

它给了我这样的结果

1)
Run Code Online (Sandbox Code Playgroud)

有没有办法只检索那些以我的预期模式开头的键的数据?我只想检索这些键,因为我的数据集包含许多其他不相关的字段。

redis redis-cli

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

在Windows [Redis 64Bit]下是否可以在生产环境中使用?

我在开发环境Redis-64上使用了此版本。

我想知道此版本是否适合生产环境吗?

如果可以使用,那么与Linux下相比,需要注意什么?

windows redis

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