小编Mar*_*urz的帖子

MySql Tinytext vs Varchar vs Char

建立一个有可能受到点击和流量打击的系统.这是典型的Apache/PHP/MySql设置.

之前已经构建了大量系统,但从未有过我真正需要就此大小的潜在可扩展性做出决策的情况.我有几十个关于构建这个系列的系统的问题,但对于这个特定的问题,我正在尝试决定使用什么作为数据类型.

这是100英尺的视图:

我们有一个表(除其他外)有一个描述字段.我们决定将其限制为255个字符.它将是可搜索的(即:显示包含......的描述的所有条目).问题:这个表在某些时候可能有数百万条目(或者我们认为).

我还没有想出搜索的策略(MySql LIKE运算符可能很慢和/或我猜测这么大的#记录的猪),但那是另一个SO问题.对于这个问题,我想知道将这个字段创建为tinytext,varchar和char的专业和缺点是什么.

不是数据库专家,因此任何和所有评论都是有帮助的.谢谢 -

php mysql sql database database-design

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

PHP类型提示:支持数组,对象不是?

我错过了什么,或者PHP 5.x中是否真的不支持通用对象类型提示?

我发现支持提示数组非常奇怪,而提示对象不是,至少不是开箱即用.

我想要这样的东西:

function foo(object $o)
Run Code Online (Sandbox Code Playgroud)

就像我们一样:

function foo(array $o)
Run Code Online (Sandbox Code Playgroud)

可能的使用示例:对象集合类的方法.

解决方法:使用由所有类实现的接口"Object"或从泛型类"Object"扩展所有类并编写如下内容:

function foo(Object $o)
Run Code Online (Sandbox Code Playgroud)

嗯,那不可爱.

使用stdClass类型提示不起作用:

可捕获的致命错误:传递给c :: add()的参数1必须是stdClass的一个实例,给出的是b的实例

php oop

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

...其中count(col)> 1

我有这样一张桌子:

+-----+-----+-------+
| id  | fk  | value |
+-----+-----+-------+
| 0   | 1   | peter |
| 1   | 1   | josh  |
| 3   | 2   | marc  |
| ... | ... | ...   |
Run Code Online (Sandbox Code Playgroud)

我现在想要获得具有多个值的所有条目.预期结果将是:

+-----+-------+
| fk  | count |
+-----+-------+
| 1   | 2     |
| ... | ...   |
Run Code Online (Sandbox Code Playgroud)

我试图像这样实现:

select fk, count(value) from table where count(value) > 1;
Run Code Online (Sandbox Code Playgroud)

但甲骨文并不喜欢它.

所以我试过这个......

select * from (
    select fk, count(value) as cnt from table
) …
Run Code Online (Sandbox Code Playgroud)

sql oracle group-by having

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

DevArt的dotConnect for Oracle与DataDirect的ADO.NET数据提供程序

是否有人对DevArt的dotConnect for Oracle和DataDirectADO.NET数据提供程序进行了比较分析.

我们正在考虑将这些框架中提供的实体框架支持用于关键企业应用程序.我读过的一些文章建议如下:

  1. 与DataDirect相比,DevArt dotConnect快得多
  2. DataDirect许可证比DevArt许可证更昂贵

任何人都可以更多地了解技术方面,以帮助决策过程吗?

oracle ado.net entity-framework devart dotconnect

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

Java泛型和Serializable

我们创建了一个抽象类,用于处理Redis(set/get values),如下所示:

public abstract class AbstractCachedSupport<T extends Serializable> {
    protected T get(CacheKey key, Supplier<T> supplier) {...}
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我不高兴的是,在扩展这个类时我们不能使用List,Map等接口:

public class CachedMap extends AbstractCachedSupport<Map<String, Integer>>
Run Code Online (Sandbox Code Playgroud)

因为它们不扩展Serializable,所以我们必须始终使用具体的类:

public class CachedMap extends AbstractCachedSupport<HashMap<String, Integer>>
Run Code Online (Sandbox Code Playgroud)

毋庸置疑,当从一个具体类迁移到另一个具体类时,这有其共同的问题.这也不是我称之为最佳实践的东西,但也许这只是我.

使我们能够灵活地使用接口的替代方法是删除有界类型并在运行时检查T是否扩展Serializable:

public abstract class AbstractCachedSupport<T> {
    public AbstractCachedSupport() {
        final Class<T> type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        if (!Serializable.class.isAssignableFrom(type)) {
            throw new RuntimeException("T must extend Serializable");
        }
    }

    protected T get(CacheKey key, Supplier<T> supplier) {...}
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这使我们没有编译时间检查T扩展Serializable,也不是一件好事.

你知道我们如何能够优雅地解决这个问题吗?您是想使用第一个(有界类型参数)还是第二个(仅运行时检查)?

折衷方案是选择第一个并始终使用容器类来保存集合:

public class IntegerParamsContainer implements Serializable { …
Run Code Online (Sandbox Code Playgroud)

java generics serialization

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

替换字符串中的子字符串,除非字符串位于引号内

正则表达式方言:Java
问题:给定一个字符串,替换其中出现的所有子字符串,除非这些出现在引号内。

示例1:

string: "test substr 'test substr' substr"
substring: "substr"
replacement: "YYYY"
output: "test YYYY 'test substr' YYYY"
Run Code Online (Sandbox Code Playgroud)

示例2:

string: "test sstr 'test sstr' sstr"
substring: "substr"
replacement: "YYYY"
output: "test sstr 'test sstr' sstr"
Run Code Online (Sandbox Code Playgroud)

例3:

string: "test 'test substr'"
substring: "substr"
replacement: "YYYY"
output: "test 'test substr'"
Run Code Online (Sandbox Code Playgroud)

这是迄今为止我最好的尝试:

Regex: ((?:[^']*'[^']+')*?[^']*?)substring
Replace: $1replacement
Run Code Online (Sandbox Code Playgroud)

它的问题是它需要在引号内的最后一个字符串之后在引号外有一个子字符串,否则它将不起作用,因此Example3将失败(输出:“test 'test YYYY'”)。

非常感谢您的帮助。

java regex

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

Java是否有检查对象类型的方法?

在Javascript中,如果要检查chrome中的某个对象,

console.log(object) 将打印输出变量和关于对象的方法.

Ruby也有object.inspect返回有关该对象的基本信息.

我应该在Java中使用什么代码来检查对象?

java reflection serialization dump object

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

Java中的双重算术和相等

这是一个奇怪的事(至少对我来说).此例程打印为true:

double x = 11.0;
double y = 10.0;
if (x-y == 1.0) {
    // print true
} else {
    // print false
}
Run Code Online (Sandbox Code Playgroud)

但是这个例程打印错误:

double x = 1.1;
double y = 1.0;
if (x-y == 0.1) {
    // print true
} else {
    // print false
}
Run Code Online (Sandbox Code Playgroud)

有人想解释这里发生了什么吗?我猜这与ints冒充floats的整数运算有关.此外,还有其他基地(除了10)有这个属性?

java floating-point double floating-accuracy ieee-754

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

Java如何使用常规运算符执行操作有什么不同?

我正在研究一个关于pascal三角形的java程序.

所以这就是它的编码方式:

for(int i = 0; i < 5; i++){
    for(int j = 0, x = 1; j <= i; j++){
        System.out.print(x + " ");
        x = x * (i - j) / (j + 1);
    }
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

它显示:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

但是当我尝试将代码更改为:

for(int i = 0; i < 5; i++){
    for(int j = 0, x = 1; j <= i; j++){
        System.out.print(x + " ");
        x …
Run Code Online (Sandbox Code Playgroud)

java operators operator-precedence

0
推荐指数
2
解决办法
209
查看次数

java.util.Random特性

所以这是人们可能做的最简单的事情之一:

Random rng = new Random();
int a = rng.nextInt(10);
int b = rng.nextInt(10);
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但我们希望避免使用相等的a和b,所以我们自然会这样做:

Random rng = new Random();
int a = rng.nextInt(10);
int b = rng.nextInt(10);
while (a == b){
  b = rng.nextInt(10);
}
Run Code Online (Sandbox Code Playgroud)

然而 - 对我非常非常惊讶 - while循环永远不会退出.决不.

我理解,从理论上讲,随机数字可以包含一个数字的无限序列.但是我已经让这段代码运行了10分钟而且它还没有退出循环.

怎么了?我在最新的Linux Mint上运行JDK 6 Update 16.

java random linux-mint

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

SQL语法错误

我有java代码连接MySQL和反向数据.我有以下代码,它总是给出SQLSyntaxErrorException并说第1行有语法错误.我无法理解为什么.请帮我.我可以肯定这些名字是正确的.


private void saveDetails(int slct) throws SQLException {

        if(slct == ADD_NEW_RECORD) {
            String query = "INSERT INTO emp(?,?,?,?,?,?,?,?,?,?,?,?,?,?) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement st = Main.db.con.prepareStatement(query);
            st.setString(1, "epfno");
            st.setString(2, "fname");
            st.setString(3, "lname");
            st.setString(4, "sex");
            st.setString(5, "nid");
            st.setString(6, "address");
            st.setString(7, "birthday");
            st.setString(8, "position");
            st.setString(9, "tpno");
            st.setString(10, "fathername");
            st.setString(11, "mothername");
            st.setString(12, "m_status");
            st.setString(13, "comments");
            st.setString(14, "photo_id");
            st.setInt(15, emp.epfno);
            st.setString(16, emp.fname);
            st.setString(17, emp.lname);
            st.setInt(18, emp.sex);
            st.setString(19, String.copyValueOf(emp.nid));
            st.setString(20, emp.address);
            st.setDate(21, emp.birthday);
            st.setString(22, emp.position);
            st.setString(23, emp.tpno);
            st.setString(24, emp.fathername);
            st.setString(25, emp.mothername);
            st.setBoolean(26, emp.m_status);
            st.setString(27, emp.comments);
            st.setString(28, …
Run Code Online (Sandbox Code Playgroud)

java mysql sql

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